在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 一個對象轉(zhuǎn)為數(shù)組對象

一個對象轉(zhuǎn)為數(shù)組對象

預(yù)期:

categories:{0: "語種", 1: "風(fēng)格", 2: "場景", 3: "情感", 4: "主題"}

轉(zhuǎn)為

catlist= [{cat: "語種"}{cat: "風(fēng)格"}{cat: "場景"}{cat: "情感"}{cat: "主題"}]

實際

for(let i in categories ){
    catag.cat = categories[i];
    catlist.push(catag);
    console.log(catlist);             
}
catlist= [{cat: "主題"}{cat: "主題"}{cat: "主題"}{cat: "主題"}{cat: "主題"}]

實在是不知道為什么,為什么循環(huán)數(shù)組push會更改前面push的值

回答
編輯回答
哎呦喂

catag 是一個對象,JS 中對象的互相賦值都是對值的引用,所以每次修改的項 都是 同一個項的值,導(dǎo)致了前面被覆蓋。

var a = {aa: 123};
var b = a;

b.aa = 456;
a // {aa: 456}
2018年1月31日 16:18
編輯回答
懷中人

let categories={0: "語種", 1: "風(fēng)格", 2: "場景", 3: "情感", 4: "主題"}, catlist=[]; Object.values(categories).map((item)=>{ catlist.push({cat:item}) })

2018年4月4日 16:53
編輯回答
礙你眼

var categories = {0: "語種", 1: "風(fēng)格", 2: "場景", 3: "情感", 4: "主題"};

var catlist = [];
for(let i in categories ){

var catag = {};
catag.cat = categories[i];
console.log(catag.cat);
catlist.push(catag);
console.log(catlist);             

}

2017年4月30日 11:33
編輯回答
淚染裳

可以先淺拷貝一下

2018年8月31日 03:36
編輯回答
不舍棄

啊,你這樣寫 catag 我初一看,一位是系統(tǒng)內(nèi)置,后來發(fā)現(xiàn)原來不是。js 里面經(jīng)常會遇到這種問題,為什么我改動之后,按照邏輯不應(yīng)該如此,為什么會發(fā)生一次改動,之前也被改動了呢?這個關(guān)鍵在于 js 的特性了,我也不是很懂,但知道這個原因就行。因為 你通過 push 將 catag 放入 catlist ,所以,你放的不是 catag 的值,而是 catag 這個對象,所以,你每次在改變 catag 的時候,并且又沒有重新定義它。所以在最后的時候你可以這樣看:`catag = ['cat':'教育'];
catlist = [catag,catag,catag,catag]`
就是這么個原因。解決方法有多個,一直接 push 對應(yīng)應(yīng)對參數(shù)結(jié)果?;蛘呦駱巧夏菢?,每次重定義 catag 變量。

2018年5月25日 12:18
編輯回答
失魂人

因為你這個catag沒有重新定義,都是指向同一個引用,你要在循環(huán)里面每次重新定義一個,或者直接push

for (let i in categories) {
  catlist.push({cat: categories[i]})
}
2018年3月10日 18:24
編輯回答
拼未來

簡單,因為你的catag的地址沒變過,你每一次循環(huán)都是改的同一個catag的值,然后把同一個catag插入到數(shù)組中。
而不是你猜測的數(shù)組push會更改前面push的值。
改成這樣:

for(let i in categories ){
    const catag={}
    catag.cat = categories[i];
    catlist.push(catag);
    console.log(catlist);             
}
2017年1月13日 13:22