Как создать массив в JavaScript, индексирование которого начинается с 1?
По умолчанию индексирование каждого массива JavaScript начинается с 0. Я хочу создать массив, индексирование которого начинается с 1.
Я знаю, должно быть очень тривиально... Спасибо за вашу помощь.
Ответы
Ответ 1
Это не тривиально. Это невозможно. Лучшее, что вы можете сделать, это создать объект, используя числовые свойства, начиная с 1, но это не то же самое.
Почему именно вы хотите, чтобы он начинался с 1? Или:
Ответ 2
Так как этот вопрос также появляется для поиска Google, такого как "начальный массив javascript в 1", я дам другой ответ:
Массивы можно нарезать. Таким образом, вы можете получить нарезную версию массива следующим образом:
var someArray = [0, 1, 2, 3];
someArray.slice(1);
[1, 2, 3]
someArray.slice(2, 4);
[2, 3]
Источник: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
Ответ 3
Простое решение - заполнить нулевой элемент:
var map = [null, 'January', 'February', 'March'];
'First month : ' + map[1];
Семантически было бы лучше использовать объект:
var map = {1:'January', 2:'February', 3:'March'};
'First month : ' + map[1];
Обратите внимание, что эти ключи на самом деле не являются целочисленными, ключи объектов всегда являются строками.
Кроме того, мы не можем использовать точечную запись для доступа. (MDN - Средства доступа к собственности)
Я бы выбрал первое решение, которое мне кажется менее запутанным.
Ответ 4
Хорошо, согласно @cletus, вы не могли этого сделать, потому что это встроенная функция javascript, но вы можете пойти немного по-другому, если вы все еще этого хотите. Вы можете написать свои собственные зависящие от индекса функции Array (например, reduce
, map
, forEach
), чтобы начать с 1. Это не сложная задача, но все же спросите себя: зачем мне это нужно?
Array.prototype.mapWithIndexOne = function(func) {
const initial = []
for (let i = 1; i < this.length + 1; i++) {
initial.push(func(this[i - 1], i))
}
return initial
}
const array = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
console.log(array.mapWithIndexOne((element, index) => '${element}-${index}'))
// => ["First-1", "Second-2", "Third-3", "Fourth-4", "Fifth-5"]
Codepen: https://codepen.io/anon/pen/rvbNZR?editors=0012
Ответ 5
Вы можете использовать delete для удаления первого элемента следующим образом:
let arr = ['a','b','c'];
delete arr[0];
console.log(arr[0]);
console.log(arr[1]);
Ответ 6
Сначала добавьте эту функцию в коды javascript:
var oneArray = function(theArray)
{
theArray.splice(0,0,null);
return theArray
}
Теперь используйте его так:
var myArray= oneArray(['My', 'name', 'is', 'Ram']);
alert(myArray[1]); << this line show you: My
Смотрите живая демонстрация
Ответ 7
Я столкнулся с ситуацией, когда мне нужно, чтобы массив начинался с индекса 1. Вот что я сделал:
var products = ['bar', 'baz'];
products = $.makeArray(products); // necessary to unshift a jQuery object
products.unshift('foo'); // add "foo" to the beginning of the array
$(products).each(function(index) {
if (index === 0) {
return true; // we will skip "foo"
}
// From now on we can use products[index] starting from 1
});
Ответ 8
Простой, просто сделайте два изменения в классическом цикле Javascript for
.
var Array = ['a', 'b', 'c'];
for (var i = 1; i <= Array.length; i++) {
//"i" starts at 1 and ends
//after it equals "length"
console.log(i);
}