gpt4 book ai didi

javascript:插入空数组的意外行为

转载 作者:数据小太阳 更新时间:2023-10-29 05:51:47 28 4
gpt4 key购买 nike

以下代码:

var arr1 = [1,2,3];
var obj1 = {};

for (var j = 0; j < arr1.length; j++) {
if (obj1[j.toString()])
obj1[j.toString()] = obj1[j.toString()].push(j)
else
obj1[j.toString()] = [].push(j);
}

产生了以下输出:

   obj1
=> { '0': 1, '1': 1, '2': 1 }

我很想知道为什么。

(我现在知道以下代码:

var arr1 = [1,2,3];
var obj1 = {};

for (var j = 0; j < arr1.length; j++) {
if (obj1[j.toString()])
obj1[j.toString()] = obj1[j.toString()].push(j)
else {
obj1[j.toString()] = [];
obj1[j.toString()].push(j);
}
}

会给我我想要的输出:

   obj1
=> { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] }

)

最佳答案

因为,as per the documentationArray.prototype.push() 方法返回数组长度,而不是数组本身。

您可能更喜欢 concat method像这样:

var arr1 = [1,2,3];
var obj2 = {}

for (var j = 0; j < arr1.length; j++) {
var js = j.toString()
if (obj2[js]) {
obj2[js] = obj2[js].concat([j])
} else {
obj2[js] = [j]
}
}
console.log(obj2) // => { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] }

// shorter version
var obj3 = {}

for (var j = 0; j < arr1.length; j++) {
var js = j.toString()
obj3[js] = [].concat(obj3[js] || [], [j])
}

console.log(obj3) // => { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] }

关于javascript:插入空数组的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756680/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com