默认情况下,每个 JavaScript 数组的索引都从 0 开始。我想创建一个索引从 1 开始的数组。
我知道,这可能非常琐碎... 感谢您的帮助。
默认情况下,每个 JavaScript 数组的索引都从 0 开始。我想创建一个索引从 1 开始的数组。
我知道,这可能非常琐碎... 感谢您的帮助。
这并不是一件简单的事情,而是不可能的。你最好能够创建一个使用数字属性从1开始的对象,但那并不是同一件事。
为什么你要从1开始呢?可以选择:
从0开始,并根据需要调整索引;或者
从0开始,只忽略索引0(即仅使用索引1及以上)。
a = ["ignore me", "this has index 1", "another string, at index 2"]; firstString = a[1];
然而,这个建议并不是非常有用 - 内置函数如 for (s of a)
不会“知道”你想忽略 a[0]
- 完全由你来找到不使用 a[0]
的编码方式;习惯从0开始的数组更加实用。 - ToolmakerSteve一个简单的解决方案是填充第零项:
var map = [null, 'January', 'February', 'March'];
'First month : ' + map[1];
从语义的角度来看,使用一个对象会更好:
var map = {1:'January', 2:'February', 3:'March'};
'First month : ' + map[1];
请注意这些键实际上不是整数,对象键始终为字符串。
此外,我们不能使用点表示法来访问。(MDN - 属性访问器)
我会选择第一种解决方案,我认为它较少令人困惑。
var someArray = [0, 1, 2, 3];
someArray.slice(1);
[1, 2, 3]
someArray.slice(2, 4);
[2, 3]
来源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
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]);
如果你想确保始终获取第一个 truthy 元素,而不考虑索引,并且可以使用 ES6,则可以使用以下代码:
arr.find(Boolean)
let usernames = ['bob', 'sally', 'frank']
let myArray = [];
let arrayIndex = 1;
usernames.map(username => {
myArray[arrayIndex] = username;
arrayIndex++;
})
console.log(myArray);
数组(4)[<1个空槽>,“bob”,“sally”,“frank”]
1:“bob”
2:“sally”
3:“frank”
长度:4
注意长度为“4”。
console.log(myArray[0]);
未定义
使用这个方法,我们有一个优势,就是在数组上使用 Object.keys()
不会返回空的(未定义的)元素。因此,在上面的数组中:
console.log(Object.keys(myArray).length);
注意:这可能有点不太正式,使用时请小心。3
const currentPage = pages[1];
map
循环你的(有问题的)数组时,它会忽略你不想要的0索引。myArray.map((value, index) => {
console.log(index);
console.log(value);
})
1
鲍勃
2
莎莉
3
弗兰克
然而,对于一般用途,您应该使用索引0,因此当您循环一些数据并输出内容时,您不会被第一个为空的内容所困扰。
好的,根据 @cletus 的说法,你不能这样做,因为它是内置的 JavaScript 功能,但如果你仍然想要那个功能,可以稍微换一种方式。你可以编写自己的基于索引的数组函数(如 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"]
只想指出,在 C 编程语言中,索引也是从第一个元素开始的偏移量。这允许各种偏移量计算,而不必在进行数学运算之前减去 1,只需稍后再加回 1。
如果您想要一个“1”数组,因为索引映射到其他值,那么对于枚举或哈希就是这种情况。
Array.map
。[,1,2,3].map((v, i) => ++i)
arr=[,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
for(i=1; arr[i]!=undefined; i++) {console.log(i + ':' +arr[i])}
有时候知道这个可能会很有用,但是i=0的项仍然存在,只是因为它是空的或未定义而没有显示。即使最后一个数组项的索引是26,长度为27也证明了这一事实。
空项目表示为没有数字。 但是,如果您将项目设置为未定义,则呈现为未定义而不是空:
当然,如果您像下面这样循环,仍然可以呈现未定义的内容:for(i=0; i<arr.length; i++) {console.log(i +':'+ arr[i])}
那么您将得到以下结果:
从上面的截图中可以看到,i=0的项存在,但i=27的项不存在。
所以回答这个问题: 在javascript中,数组的索引从0开始,而不从其他位置开始。但我们可以观察到一些类似“仿真”的行为,即使它不完全是真实的。
在VBA中,可以在代码模块顶部使用“Option Base 1”声明来将默认下限更改为1,而不是0。但是似乎Javascript目前还没有这种可能性。
还可以使用delete方法获取空/未定义元素 let myarr = ['first','second','third','more elem']; delete myarr[0]; 现在myarr是 [empty,'second','third','more elem']; 并且我之前说的仍然有效。查看Chrome控制台:
首先将此函数添加到您的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
请查看实时演示
Array.from(myArray.keys())
返回[0, 1, 2, 3, 4]
而不是[1, 2, 3, 4, 5]
。 - Michał Perłakowski[0, 1, 2, 3, 4]
对于@detj(提问者)来说没有任何意外的值。他只需要在n>=1
时使用([0, 1, 2, 3, 4])[n]
。所以这个数组对他来说总是有正确的结果。 - Ramin Bateni
singlyLinkedList
,并修改它的方法。 - user12200634if(i !== false)
。 - Andres SK