我有一個這樣的資料陣列:
dataArray = [
0: {"Item1" : Val1, "Item2" : Val2, "Item3" : Val3 ... "ItemN" : ValN}
1: {"Item1" : Val1, "Item2" : Val2, "Item3" : Val3 ... "ItemN" : ValN}
.
.
N: {"Item1" : Val1, "Item2" : Val2, "Item3" : Val3 ... "ItemN" : ValN}
]
我有另一個陣列,其中包含一組按所需順序的任意可變元素:
selArray = ["Item2", "Item9", "Item7"]
所需的輸出:
outArray = [
0: {"Item2" : Val2, "Item9" : Val9, "Item7" : Val7}
1: {"Item2" : Val2, "Item9" : Val9, "Item7" : Val7}
.
.
N: {"Item2" : Val2, "Item9" : Val9, "Item7" : Val7}
]
我想根據 selArray 中的元素選擇和重新排序 dataArray 中的元素。dataArray 和 selAarray 的內容將在應用程式中多次更改,因此選擇陣列中的位置或洗掉陣列中的專案將不起作用。
將不勝感激有關如何做到這一點的任何想法。TIA
uj5u.com熱心網友回復:
這樣的事情應該做你:
function selectProperties( arr, ...keys ) {
const selection = arr.map( obj =>
Object.fromEntries(
Object
.entries(obj)
.filter( tuple => arr.includes(tuple[0]) )
)
)
}
但是使用Lodash.js可能更容易,并且......
const _ = require('lodash');
const selectProperties = ( arr, ...keys ) => arr.map( obj =>
_.pick(obj,keys)
);
您不撰寫的代碼是您不必維護的代碼。
uj5u.com熱心網友回復:
我希望它對你有幫助。
const dataArray = [{
"Item5": 5,
"Item6": 6,
"Item1": 1,
"Item2": 2,
"Item3": 3,
"Item4": 4,
}, {
"Item5": 5,
"Item6": 6,
"Item1": 1,
"Item3": 3,
"Item2": 2,
"Item4": 4,
}
]
const selArray = ["Item1", "Item2", "Item3", "Item4", "Item5", "Item6"]
const organized = dataArray.map((elm) => {
nelm = {};
selArray.map((elm2) => {
if (elm.hasOwnProperty(elm2)) {
return nelm[elm2] = elm[elm2]
}
})
return nelm
})
console.log(organized)
uj5u.com熱心網友回復:
感謝您的建議。我的蠻力解決方案是
- 將資料陣列轉換為物件
- 過濾和減少物件
- 基于 selArr 將物件元素重新排序為陣列:
var inMap = { ...inData }
var outData = [];
for(i = 0; i < inData.length; i ){
var tmp2 = Object.keys(inMap[i]).
filter((key) => selArr.includes(key)).
reduce((cur, key) => { return Object.assign(cur, { [key]: inMap[i][key] })}, {});
var tmp3 = [];
for(j = 0; j < selArr.length;j ){
tmp3[selArr[j]] = tmp2[selArr[j]];
}
outData.push(tmp3);
}
這適用于我需要使用的不同情況。AB
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/466260.html
標籤:javascript 数组
