[英]Create new array of objects based on data from a filtered array of objects
[英]How to build a new Array of Objects from existing Array of Objects, filtered to match a list of keys
我有一個對象數組,例如:
[
{
"fName": "Jon",
"lName": "Doe",
"age": "30",
"shirtSize": "M"
},
{
"fName": "Jane",
"lName": "Foe",
"age": "25",
"shirtSize": "M"
},
...
]
我還有一個鍵列表,例如:
["age", "shirtSize"]
我想獲取對象數組,並構建一個與鍵列表數組匹配的新對象數組,有效地過濾對象數組以僅包含我想要的鍵/值對。 以上是例子,真實的數據集當然更冗長。 我在下面的算法中強制使用了它,正如預期的那樣,由於我在地圖中的循環,它的性能根本不是很好。 我的結果是這樣的:
[
{
"age": "30",
"shirtSize": "M"
},
{
"age": "25",
"shirtSize": "M"
},
...
]
我沒有使用類似 lodash 的任何東西。 我怎樣才能提高這個性能?
const data = [
{
"fName": "Jon",
"lName": "Doe",
"age": "30",
"shirtSize": "M"
},
{
"fName": "Jane",
"lName": "Foe",
"age": "25",
"shirtSize": "M"
}
];
const keyList = ["age", "shirtSize"];
const filteredDataset = data.map((elem) => {
let tempHolder = {};
for (let key of keyList) {
tempHolder[key] = elem[key];
}
return tempHolder;
});
return filteredDataset;
var results = [];
for(var person of data){
var obj = {};
for(var key of keyList){
obj[key] = person[key];
}
results.push(obj);
}
第一個循環遍歷數據,內部循環遍歷 keyList 並將這些屬性添加到臨時對象,然后將其推送到結果數組。
編輯:您的代碼基本相同,您的代碼只是使用 map 進行迭代而不是 for...of 循環。
您可以更明確地表達相同的算法:
const select = (props) => (objs) => objs .map (o => Object .fromEntries (props .map (p => [p, o[p]]))) const items = [{fName: "Jon", lName: "Doe", age: "30", shirtSize: "M"}, {fName: "Jane", lName: "Foe", age: "25", shirtSize: "M"}] console .log (select (["age", "shirtSize"]) (items))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.