[英]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.