预期:categories:{0: "语种", 1: "风格", 2: "场景", 3: "情感", 4: "主题"}转为catlist= [{cat: "语种"}{cat: "风格"}{cat: "场景"}{cat: "情感"}{cat: "主题"}]实际for(let i in categories ){ catag.cat = categories[i]; catlist.push(catag); console.log(catlist); }catlist= [{cat: "主题"}{cat: "主题"}{cat: "主题"}{cat: "主题"}{cat: "主题"}]实在是不知道为什么,为什么循环数组push会更改前面push的值
6 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
因为你这个catag没有重新定义,都是指向同一个引用,你要在循环里面每次重新定义一个,或者直接push
for (let i in categories) {
catlist.push({cat: categories[i]})
}
子衿沉夜
TA贡献1828条经验 获得超3个赞
芜湖不芜
TA贡献1796条经验 获得超7个赞
catag 是一个对象,JS 中对象的互相赋值都是对值的引用,所以每次修改的项 都是 同一个项的值,导致了前面被覆盖。
var a = {aa: 123};
var b = a;
b.aa = 456;
a // {aa: 456}
杨__羊羊
TA贡献1943条经验 获得超7个赞
啊,你这样写 catag 我初一看,一位是系统内置,后来发现原来不是。js 里面经常会遇到这种问题,为什么我改动之后,按照逻辑不应该如此,为什么会发生一次改动,之前也被改动了呢?这个关键在于 js 的特性了,我也不是很懂,但知道这个原因就行。因为 你通过 push 将 catag 放入 catlist ,所以,你放的不是 catag 的值,而是 catag 这个对象,所以,你每次在改变 catag 的时候,并且又没有重新定义它。所以在最后的时候你可以这样看:`catag = ['cat':'教育'];
catlist = [catag,catag,catag,catag]`
就是这么个原因。解决方法有多个,一直接 push 对应应对参数结果。或者像楼上那样,每次重定义 catag 变量。
添加回答
举报
0/150
提交
取消