Javascript数组的第一个结果返回“空”

时间:2020-10-19 13:19:20

标签: javascript

使用javascript,我有一个measurements变量。它是由4个对象组成的数组,每个对象包含一个“ id”键。

let measurements = [
    {
        'id': 1,
        ...
    },
    {
        'id': 2,
        ...
    },
    {
        'id': 3,
        ...
    },
    {
        'id': 4,
        ...
    },
]

我想创建一个带有ID的新数组作为键,但是结果很奇怪:

测试1:

let list = []

for (let i = 0; i < measurements.length; i++) {
    list[i] = ''
}

console.log(list) // Ok, I have 4 entries ["", "", "", ""]

测试2:

let list = []

for (let i = 0; i < measurements.length; i++) {
    list[measurements[i].id] = ''
}

console.log(list) // I have 5 entries  [empty, "", "", "", ""], why ?

3 个答案:

答案 0 :(得分:1)

根据the specification,数组实例上特殊的.length自己的属性将始终返回一个比数组的最大整数索引大的整数。

在下面,为索引2设置值将确保.length属性为数组3返回arr,因此该数组将成为稀疏数组两个空插槽组成的数组,后跟索引foo处的值2

const arr = []
arr[2] = 'foo'
console.log(arr.length) // 3
console.log(arr) // [empty, empty, 'foo']

在这种情况下,其他索引实际上不存在。这是因为JavaScript旨在支持sparse arrays(即具有不连续索引的数组)。 JavaScript引擎有时将数组中缺少的索引表示为empty。请注意,某些基于Web的JavaScript编辑器(例如StackOverflow使用的那些)将这些位置呈现为包含undefined(这是不正确的,并且可能限制了翻译过程)。

const arr = []
arr[2] = 'foo'
console.log(arr.length) // 3
console.log(arr) // [undefined, undefined, 'foo'] !

请记住,在JavaScript数组中,“索引对象”是适用于索引位置的约定(它们是具有与正整数相对应的字符串名称的属性,例如'2')。一旦理解了这一点,就很清楚稀疏数组是如何“起作用”的。数组中的“孔”是由这些属性名称表示的,从零开始的连续整数序列中存在间隙的位置。

例如

Array.from({ '1': 'foo', '3': 'bar', length: 4 }) // [empty, 'foo', empty, 'bar']

答案 1 :(得分:0)

数组项从0开始计数。在循环中,您要为每个id添加元素。

让列表= []

for(令i = 0; i <测量长度; i ++){ list [measurements [i] .id] =''}

console.log(list)//我有5个条目[empty,“”,“”,“”,“”],为什么?

每次循环都将一个项目添加到列表数组中的特定索引。

因此,您以:[]开始 然后,将一个项目添加到数组中的位置1:[空,“”]。如果位置0存在,则只能存在位置1。但是您没有在位置0添加任何内容,因此为空。

要回答您的后续问题:如果您需要数组来通过id查找内容,则可以使用Javascript中的对象:

{1:“”,2:“”,...}

如果项目的顺序很重要,您仍然可以使用数组并接受其中可能存在间隙的情况。

答案 2 :(得分:-1)

数组项从0开始计数。在循环中,您要为每个id添加元素。但是您从1开始,这意味着将有一个空白。

请执行id-1来解决此问题:

let list = []

for (let i = 0; i < measurements.length; i++) {
    list[measurements[i].id-1] = ''
}

console.log(list)

或更改数组本身:

let measurements = [
    {
        'id': 0,
    },
    {
        'id': 1,
    },
    {
        'id': 2,
    },
    {
        'id': 3,
    },
]
相关问题