JavaScript:推送到空数组中的意外行为
javascript: unexpected behavior pushing into empty array
以下代码:
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 ] }
)
因为,根据文档,Array.prototype.push()
方法返回数组长度,而不是数组本身。
您可能更喜欢这样的concat
方法:
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 ] }
相关文章:
- 意外结果,在 ASP.Net 中解析 JSON 对象的数组
- Javascript 数组反向函数意外行为
- 使用变量初始化数组:意外的令牌 +
- 在 JS 中短路空数组会产生意外结果:“[] ||真 == []'
- 推入数组会产生意外的结果
- JavaScript在数组内迭代数组的意外行为
- JavaScript数组-意外的令牌
- JavaScript:推送到空数组中的意外行为
- 意外的类型错误 - Javascript,多维数组
- 在用数组填充初始化的数组上使用数组映射的意外行为
- 切换句柄多维数组.意外结果
- 随后的多维数组排序会产生意外的结果
- 将数组项用作对象中的键时出现意外的令牌错误
- 从数组中拼接出意外的元素
- JavaScript中2D数组的值发生意外更改
- JavaScript 二维数组填充中的意外输出
- 将字段插入子文档数组中.意外行为
- AngularJS分析JSON数组对象意外的令牌:
- 意外标记d'当尝试将对象添加到Javascript对象数组时
- 数组参数解构抛出意外错误