【发布时间】:2016-06-06 03:11:05
【问题描述】:
您好,我在 MDN 上遇到了一个带有 map 的示例,我通过常规数组理解它,但这个示例让我陷入了循环。
var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray is now [{1:10}, {2:20}, {3:30}],
// kvArray is still [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}]
基本上我不明白“键”和“值”属性是如何“消失”的。我以为 rObj[obj.key] = obj.value;在原始数组中表示的行,找到键的值并将原始键替换为该键的值,此时我似乎真的很困惑。有人可以解释一下他们是如何得到这些值的吗?
【问题讨论】:
-
rObj是每次调用回调时创建的新空对象。rObj[obj.key] = obj.value;然后将一个属性添加到该对象,其属性名称等于obj.key... -
他们并没有消失——他们仍然在
kvArray -
我不明白你的问题。在地图中,为每个数组项创建一个新对象。这些对象中的每一个都为其键分配了当前数组索引的索引,值是当前数组索引的值。 reformattedArray 是一个包含所有对象的返回数组。
-
这其实和map没什么关系。以下示例是等效的:
object1 = {key: 'a', value: 'b'}; object2 = {}; object2[object1.key] = object2.value。制作object2对object1没有影响。 -
哦,谢谢你们。我发现了我困惑的地方。我只是对下标符号感到困惑。
标签: javascript arrays dictionary