簡體   English   中英

從對象數組中獲取所有真實值

[英]Get all truthy values from an array of objects

我想從對象數組中獲取所有真實值:

 const users = [{ name: 'string', val: false, }, { name: true, val: [], } ] const identifiers = users.map(i => Object.entries(i)) const active = identifiers.filter(function(id) { const t = id.map((i, k) => id[k][1]) return t }) console.log(active)

最后上面代碼的想法是使用Object.fromEntries()並得到這樣的東西:

 const users = [{ name: 'string, }, { name: true, } ]

目前我被阻止了,我無法獲得預期值。 誰能幫助獲得預期的結果?

您可以使用Object.fromEntries來創建 object ,僅使用以下屬性

 const users = [{ name: true, val: false, }, { name: true, val: true, } ] const identifiers = users.map(e => { // Map User array return Object.fromEntries( // return new object for every element Object.entries(e).filter((o) => o[1] === true) // object constructed using just truthy values by filtering object o[1] -> value ) }); console.log(identifiers)

或者一個漂亮的襯里:

const identifiers = users.map(e => Object.fromEntries(Object.entries(e).filter(([_,o]) => o)));

您可以對Object.entriesObject.fromEntries使用reduce方法

let result = users.reduce((acc,i) => { 
                 let obj = Object.entries(i).filter(([k,v]) => v); 
                 acc.push(Object.fromEntries(obj)); 
                 return acc;  
               }, [])

console.log(result);

您可以像這樣分解、過濾和重建對象:

 const users = [{name:true,val:false,},{name:true,val:[],dd:0,ee:1,ff:[0,1]}], res = users.map(i => Object.fromEntries(Object.entries(i).filter(([_,v])=>.Array.isArray(v)&&v || v.length)) ) console.log(res)

這應該可以解決問題:

const newData = users.map(user => {
  return Object.keys(user).reduce((obj, key) => {
    if (user[key]) { //for strict truthy, make user[key] === true
      obj[key] = user[key];
    }
    return obj;
  } ,{});
});

這將:

  1. 對數組(映射)的每個元素執行 object 過濾操作。
  2. 遍歷 object (Object.keys(user).reduce) 的每個鍵
  3. 如果值是真的,只添加一個鍵值對。

請注意,這將返回一個新結構,而不是修改現有結構。 我看到了問題的更新,並相應地在代碼中添加了評論。

暫無
暫無

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

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