簡體   English   中英

通過對象數組進行映射,甚至通過與其他對象相比沒有一兩個鍵的對象進行映射

[英]Map through array of objects even through objects that don't have one or two keys compared to other objects

標題。 我可以有兩種或三種類型的對象,但是如果要向將來的對象添加任何新的鍵/屬性,我想提供可靠的功能來涵蓋所有其他情況。

每當我通過具有相同屬性( obj1obj4 )的對象進行映射時,所有內容均為K。問題是當我想使用某個keys可能不是特定對象)使函數通過arr所有對象進行映射時。

我正在考慮if ('key' in obj)但是如果可能添加新的鍵,除非我可以通過使用唯一鍵對象創建新數組來分析arr所有對象鍵,否則可能無法添加功能。 但是,如果對象將具有10個鍵,並且一個數組中將有1000個以上的對象,那么我認為將存在性能問題。 如果我錯了糾正我。

.hasOwnProperty()

const arr = [
  obj1 = {
    key1: val1,
    key2: val2,
    key3: val3
  },
  obj2 = {
    key3: val3
  },
  obj3 = {
    key1: val4,
    key2: val5,
    key3: val1
  },
  obj4 = {
    key1: val6,
    key2: val7
  }
]

您可以使用Object.keysfor...in循環來動態獲取或遍歷對象的鍵,而不用擔心對象可能具有的鍵。 像這樣:

 var obj = { "key1": 2, "key2": 3, "key-unknown": 5 } console.log("METHOD 1:"); var keys = Object.keys(obj); console.log("obj has these keys: ", keys); console.log("\\nMETHOD 2:"); for(var key in obj) { console.log("'" + key + "' is a key"); } 

使用以上兩種方法,您可以安全且動態地僅使用對象具有的鍵,而不使用對象中可能存在或可能不存在的一組預定義靜態鍵,這些預定義靜態鍵可能少於對象實際具有的鍵。

憑空猜測,您可能需要諸如以下功能:

 function fillMissingKeys(a){ var keys = a.reduce((k,o) => Object.assign(k,Object.keys(o)),[]) .reduce((o,k) => (o[k] = null,o),{}); return a.map(o => Object.assign({},keys,o)); } var arr = [ obj1 = { key1: "val1", key2: "val2", key3: "val3" }, obj2 = { key3: "val3" }, obj3 = { key1: "val4", key2: "val5", key3: "val1", key4: "val8" }, obj4 = { key1: "val6", key2: "val7" } ]; console.log(fillMissingKeys(arr)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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