[英]How to use Array.protoype.map() on array of objects to filter out some specific keys based on it's values?
[英]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的函數,該函數指示是否應保留數組中的特定元素。
您有一個數組對象,並且對象本身可以具有多個鍵和值。 您需要在這里執行一個多步驟的過程:
您可以使用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.