Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 完成FOR后,最后一个FOR循环中的值_Javascript_Jquery - Fatal编程技术网

Javascript 完成FOR后,最后一个FOR循环中的值

Javascript 完成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

我有一个函数,它获取一个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
会在每个职位上添加一个新实例。