Javascript 完成FOR后,最后一个FOR循环中的值
我有一个函数,它获取一个json作为参数,用给定json的一些值构建另一个json,并返回构建的json 函数getMyJSON(json){ var结果={ 最近更新:“, 图例:空 }; result.legends=(新数组(json.legends.length)).fill({ 名称:空, rgb:null, 值:null }); for(设j=0;jJavascript 完成FOR后,最后一个FOR循环中的值,javascript,jquery,Javascript,Jquery,我有一个函数,它获取一个json作为参数,用给定json的一些值构建另一个json,并返回构建的json 函数getMyJSON(json){ var结果={ 最近更新:“, 图例:空 }; result.legends=(新数组(json.legends.length)).fill({ 名称:空, rgb:null, 值:null }); for(设j=0;j
result.legends
与上一个json.legends
以下是输出的外观:
第一个元素(result.legends[0].name
)的图例.name
在每次循环后都会更改
最后,来自result
的所有图例.name
与来自json
的最后一个图例.name
相等。为什么?
我在google上发现它是关于变量范围的,但我不知道如何做到这一点。数组中需要独立的对象。采用相同的对象引用,这将导致每个对象中的结果相同 相反,您可以使用第二个回调参数创建一个新数组并映射新对象
result.legends = Array.from(
{ length: json.legends.length },
_ => ({ name: null, rgb: null, values: null })
);
@NinaScholz已经描述了这个问题并解决了它,但是正如我在关于这个问题的评论中提到的,您可以通过使用
map()
,改进和简化逻辑:
var obj={
图例:[{
名称:“foo”,
rgb:'C00'
},{
名称:'酒吧',
rgb:“FFF”
},{
名称:'fizz',
rgb:‘中国交建会’
},{
名称:“buzz”,
rgb:'000000'
}]
}
log(getMyJSON(obj));
函数getMyJSON(o){
返回{
最近更新:“,
图例:o.legends.map(功能(项目){
返回{
名称:item.name,
rgb:item.rgb,
值:(新数组(10)).fill(0)
}
})
};
}
首先,关于这一点,没有什么是JSON。你拥有的是一个物体。其次,如果您试图克隆/修改数组,请尝试使用map()
,这会简单得多。@Rorymcrossan我知道这不是关于json的,而是关于我的项目。我不想克隆阵列。我想创建另一个与给定数组具有不同字段的数组。但我得到了答案,问题就解决了。真的谢谢你。我试着计算出大约两天的时间。我想fill
会在每个职位上添加一个新实例。