一个对象转为数组对象

预期:


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的值


炎炎设计
浏览 436回答 6
6回答

哆啦的时光机

因为你这个catag没有重新定义,都是指向同一个引用,你要在循环里面每次重新定义一个,或者直接pushfor (let i in categories) {  catlist.push({cat: categories[i]})}

子衿沉夜

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

芜湖不芜

catag 是一个对象,JS 中对象的互相赋值都是对值的引用,所以每次修改的项 都是 同一个项的值,导致了前面被覆盖。var a = {aa: 123};var b = a;b.aa = 456;a // {aa: 456}

RISEBY

可以先浅拷贝一下

杨__羊羊

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

相关分类

JavaScript