簡體   English   中英

如何根據對象數組中的值過濾鍵

[英]how to filter keys based on values in a array of objects

我想根據鍵值對中的值過濾對象。

我想要只有真實的鍵。

嘗試使用array.filter但我找不到解決方案。

例如:-

const arry = [{'fname': true}, {'lname': true}, {'country': false}];

有人可以幫助我如何提取具有真實值的鍵。

預期o / p

['fname','lname'],因為它們是唯一正確的值。

您可以減少數組,獲取第一個條目的條目並檢查值。 如果值為真,請按鍵。

 var array = [{ fname: true }, { lname: true }, { country: false }], keys = array.reduce((r, o) => { var [key, value] = Object.entries(o)[0]; if (value) r.push(key); return r; }, []); console.log(keys); 

Array.filter帶有應返回true或false的函數,該函數指示是否應保留數組中的特定元素。

您有一個數組對象,並且對象本身可以具有多個鍵和值。 您需要在這里執行一個多步驟的過程:

  1. 將數組對象簡化為單個對象(如果多個對象包含相同的鍵,則可能會出現問題!)
  2. 從組合對象中選擇值為true的鍵。

您可以使用Object.assign合並對象。 我們將使用Array.reduce將對象數組簡化為單個對象:

const combined = arry.reduce((acc, val) => Object.assign({}, acc, val))

這將導致包含所有鍵值對的單個對象:

// { country: false, fname: true, lname: true}

現在,我們只需要選擇具有真實值的條目即可生成一個數組數組:

const entries = Object.entries(combined).filter(([k, v]) => v)
// [["lname", true], ["fname", true]]

然后,我們可以映射出該數組中的鍵,如下所示:

entries.map(([k, v]) => k)
// ["lname", "fname"]

為了簡潔起見,這些步驟都可以鏈接在一起。

 const arry = [{'fname': true}, {'lname': true}, {'country': false}]; Object.entries(arry.reduce((acc, val) => Object.assign({}, acc, val))) .filter(([k, v]) => v) .map(([k, v]) => k) 

暫無
暫無

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

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