为了账号安全,请及时绑定邮箱和手机立即绑定

一个对象转为数组对象

一个对象转为数组对象

炎炎设计 2019-03-13 13:15:40
预期: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]})

}


查看完整回答
反对 回复 2019-04-04
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

let categories={0: "语种", 1: "风格", 2: "场景", 3: "情感", 4: "主题"}, catlist=[]; Object.values(categories).map((item)=>{ catlist.push({cat:item}) })


查看完整回答
反对 回复 2019-04-04
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

catag 是一个对象,JS 中对象的互相赋值都是对值的引用,所以每次修改的项 都是 同一个项的值,导致了前面被覆盖。


var a = {aa: 123};

var b = a;


b.aa = 456;

a // {aa: 456}


查看完整回答
反对 回复 2019-04-04
?
RISEBY

TA贡献1856条经验 获得超5个赞

可以先浅拷贝一下


查看完整回答
反对 回复 2019-04-04
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

啊,你这样写 catag 我初一看,一位是系统内置,后来发现原来不是。js 里面经常会遇到这种问题,为什么我改动之后,按照逻辑不应该如此,为什么会发生一次改动,之前也被改动了呢?这个关键在于 js 的特性了,我也不是很懂,但知道这个原因就行。因为 你通过 push 将 catag 放入 catlist ,所以,你放的不是 catag 的值,而是 catag 这个对象,所以,你每次在改变 catag 的时候,并且又没有重新定义它。所以在最后的时候你可以这样看:`catag = ['cat':'教育'];
catlist = [catag,catag,catag,catag]`
就是这么个原因。解决方法有多个,一直接 push 对应应对参数结果。或者像楼上那样,每次重定义 catag 变量。

查看完整回答
反对 回复 2019-04-04
  • 6 回答
  • 0 关注
  • 435 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信