![](/img/trans.png)
[英]how to extract values from an object nested inside array inside object and store it in different arrays JAVASCRIPT
[英]How to map array values to arrays inside an object in Javascript?
我有一個對象,如下所示:
const data = [
{name: 'Week 1', owner: 0, others: 4, amt: 4},
{name: 'Week 2', owner: 0, others: 7, amt: 7},
{name: 'Week 3', owner: 0, others: 10, amt: 10},
{name: 'Week 4', owner: 0, others: 12, amt: 12},
{name: 'Week 5', owner: 0, others: 3, amt: 3},
{name: 'Week 6', owner: 0, others: 0, amt: 0},
{name: 'Week 7', owner: 0, others: 9, amt: 9},
];
我有兩個數組,即:
var arrayOwner = [0,0,0,0,0,0,0];
var arrayOthers = [2,4,3,6,3,8,9];
問題是我必須獲取每個數組的第一個值( arrayOwner
和arrayOthers
),然后更新數據數組內的第一個對象。
例如,對於1周,0從arrayOwner
和2從arrayOthers
將采取,然后更新在數據陣列的第一個對象。
data
您可以簡單地使用.map
方法映射數組data
並更新對象的兩個值: owner
和others
。
.map
方法創建一個新數組,其結果是在調用數組中的每個元素上調用提供的函數。
提供給.map
的回調可以使用多個參數:在這里,我們將使用:
currentValue: e
指數: i
這是執行映射的代碼:
const res = data.map((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e
})
完整代碼:
const data = [ {name: 'Week 1', owner: 0, others: 4, amt: 4}, {name: 'Week 2', owner: 0, others: 7, amt: 7}, {name: 'Week 3', owner: 0, others: 10, amt: 10}, {name: 'Week 4', owner: 0, others: 12, amt: 12}, {name: 'Week 5', owner: 0, others: 3, amt: 3}, {name: 'Week 6', owner: 0, others: 0, amt: 0}, {name: 'Week 7', owner: 0, others: 9, amt: 9}, ]; const arrayOwner = [0,0,0,0,0,0,0]; const arrayOthers = [2,4,3,6,3,8,9]; const res = data.map((e,i) => { e.owner = arrayOwner[i]; e.others = arrayOthers[i]; return e; }) console.log(res)
實際上,您可以修改data
而不必定義單獨的數組來獲取修改后的數組。 我們將使用.forEach
,給定的回調將與之前的相同:
data.forEach((e,i) => {
e.owner = arrayOwner[i];
e.others = arrayOthers[i];
return e;
});
這里的data
需要修改,不要用const
定義data
。 使用var
或let
代替。
let data = [ {name: 'Week 1', owner: 0, others: 4, amt: 4}, {name: 'Week 2', owner: 0, others: 7, amt: 7}, {name: 'Week 3', owner: 0, others: 10, amt: 10}, {name: 'Week 4', owner: 0, others: 12, amt: 12}, {name: 'Week 5', owner: 0, others: 3, amt: 3}, {name: 'Week 6', owner: 0, others: 0, amt: 0}, {name: 'Week 7', owner: 0, others: 9, amt: 9}, ]; const arrayOwner = [0,0,0,0,0,0,0]; const arrayOthers = [2,4,3,6,3,8,9]; data.forEach((e,i) => { e.owner = arrayOwner[i]; e.others = arrayOthers[i]; return e; }); console.log(data);
如果您想要一個較短的版本,可以為arrayOwners
和arrayOthers
設置不同的數據結構。 也許將它們放在同一陣列中,而不是:
[arrayOwners[0], arrayOwners[1], ...]
和
[arrayOthers[0], arrayOthers[1], ...]
有:
[ [arrayOwners[0], arrayOthers[0]], [arrayOwners[1], arrayOthers[1]], ... ]
因此,您可以像這樣映射它:
const res = data.map((e,i) => {
[ e.owner, e.others ] = arrayMods[i]
return e;
})
上面我使用解構分配將e.owner
設置為arrayMods[i][0]
,將e.others
為arrayMods[i][1]
。 哪個更方便。
const data = [ {name: 'Week 1', owner: 0, others: 4, amt: 4}, {name: 'Week 2', owner: 0, others: 7, amt: 7}, {name: 'Week 3', owner: 0, others: 10, amt: 10}, {name: 'Week 4', owner: 0, others: 12, amt: 12}, {name: 'Week 5', owner: 0, others: 3, amt: 3}, {name: 'Week 6', owner: 0, others: 0, amt: 0}, {name: 'Week 7', owner: 0, others: 9, amt: 9}, ]; const arrayMods = [[0,2],[0,4],[0,3],[0,6],[0,3],[0,8],[0,0]]; const res = data.map((e,i) => { [ e.owner, e.others ] = arrayMods[i] return e; }) console.log(res)
只需嘗試:
data.forEach((item, key) => {
item.owner = arrayOwner[key];
item.others = arrayOthers[key];
});
或不直接修改data
對象:
const newData = data.map((item, key) => ({
...item,
owner: arrayOwner[key],
others: arrayOthers[key],
}));
您可以使用Array#map
使用arrayOwner
和arrayOthers
值更新對象
data.map((obj, key) => {
data.owner = arrayOwner[key] ; // update current object with value from
data.other = arrayOthers[key] ; //arrayOwner and arrayOthers
return data;
});
您可以使用一個輔助對象和一個數組作為鍵並在尊重索引進行更新的同時循環執行。
const data = [{ name: 'Week 1', owner: 0, others: 4, amt: 4 }, { name: 'Week 2', owner: 0, others: 7, amt: 7 }, { name: 'Week 3', owner: 0, others: 10, amt: 10 }, { name: 'Week 4', owner: 0, others: 12, amt: 12 }, { name: 'Week 5', owner: 0, others: 3, amt: 3 }, { name: 'Week 6', owner: 0, others: 0, amt: 0 }, { name: 'Week 7', owner: 0, others: 9, amt: 9 }], arrayOwner = [0, 0, 0, 0, 0, 0, 0], arrayOthers = [2, 4, 3, 6, 3, 8, 9], update = { owner: arrayOwner, others: arrayOthers }; data.forEach((o, i) => ['owner', 'others'].forEach(k => o[k] = update[k][i])); console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.