默认情况下,每个 JavaScript 数组的索引从 0 开始。我想创建一个索引从 1 开始的数组。
我知道,一定很琐碎……谢谢你的帮助。
默认情况下,每个 JavaScript 数组的索引从 0 开始。我想创建一个索引从 1 开始的数组。
我知道,一定很琐碎……谢谢你的帮助。
这不是微不足道的。不可能。您能做的最好的事情是使用从 1 开始的数字属性创建一个对象,但这不是一回事。
为什么你希望它从 1 开始?任何一个:
从 0 开始并根据需要调整您的指数;或者
从 0 开始,忽略索引 0(即只使用索引 1 及以上)。
一个简单的解决方案是填充第零项:
var map = [null, 'January', 'February', 'March'];
'First month : ' + map[1];
从语义上讲,最好使用对象:
var map = {1:'January', 2:'February', 3:'March'};
'First month : ' + map[1];
请注意,这些键实际上不是整数,对象键始终是字符串。
此外,我们不能使用点表示法进行访问。(MDN - 属性访问器)
我会选择第一个解决方案,我认为它不那么令人困惑。
由于这个问题也会在 Google 搜索中弹出,例如“javascript start array at 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
您可以使用delete删除第一个元素,如下所示:
let arr = ['a','b','c'];
delete arr[0];
console.log(arr[0]);
console.log(arr[1]);
或者根本不定义它:
let arr = [,'b','c'];
console.log(arr[0]);
console.log(arr[1]);
如果您想确保始终获得第一个真实元素而不管索引如何并且可以访问 ES6,您可以使用:
arr.find(Boolean)
好的,根据@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"]