簡體   English   中英

如何從現有的對象數組構建新的對象數組,過濾以匹配鍵列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM