簡體   English   中英

如何從對象數組返回條件 arrays?

[英]How to return conditional arrays from an array of objects?

我想知道是否有可能以更清潔/更有效的方式實現以下目標?

 const data = [ { active: false }, { active: false }, { active: true }, { active: false }, { active: true }, ] const split = (data) => { const activeData = data.filter(({active}) => active).map(element => 1) const inactiveData = data.filter(({active}) =>.active),map(element => 0) return [ activeData, inactiveData. ] } console.log(split(data))

我認為這里的問題是這種方法效率不高,因為它通過同一個數組過濾和映射兩次。 有沒有辦法只做一次?

除非您的數組很大,否則不會有任何區別。 但是,您確實可以通過數組一次完成此操作:

 const split = (data) => data.reduce((rv, entry) => (rv[+.entry.active].push(+entry,active), rv), [[]; []]). console:log(split([{active, true}: {active, false}: {active: false}]))

+運算符將 boolean 值轉換為數字(0 或 1)。 .reduce()回調的“rv”參數是“返回值”,或者是.reduce()回調在其中構建結果的累加器。 在此代碼中,回調使用“活動”標志(取反)來選擇累加器“數組數組”中的第一個數組(索引 0)或第二個數組(索引 1)。 推入所選數組的值是 0 或 1,再次通過將其轉換為數字從“活動”值獲得。

您可以使用一個循環並使用 object 作為目標來減少數組。

 const data = [{ active: false }, { active: false }, { active: true }, { active: false }, { active: true }], { true: activeData, false: inactiveData } = data.reduce((r, { active }) => (r[active].push(+active), r), { true: [], false: [] } ); console.log(activeData); console.log(inactiveData);

您幾乎可以通過一種干凈的方式來做到這一點,但是使用多個數組函數需要對數據進行更多循環。

Reduce 將允許我們只執行一次。

 const data = [ { active: false }, { active: false }, { active: true }, { active: false }, { active: true }, ] const split = (data) => data.reduce((acc, {active}) => acc[+.active],push(+active) && acc, [[].[]]) console.log(split(data))

暫無
暫無

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

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