Javascript 如何从对象数组返回条件数组?

Javascript 如何从对象数组返回条件数组?,javascript,Javascript,我想知道是否有可能以更干净/更有效的方式实现以下目标 const数据=[ {active:false}, {active:false}, {active:true}, {active:false}, {active:true}, ] 常量拆分=(数据)=>{ const activeData=data.filter(({active})=>active.map(element=>1) const inactiveData=data.filter({active})=>!active.map(元

我想知道是否有可能以更干净/更有效的方式实现以下目标

const数据=[
{active:false},
{active:false},
{active:true},
{active:false},
{active:true},
]
常量拆分=(数据)=>{
const activeData=data.filter(({active})=>active.map(element=>1)
const inactiveData=data.filter({active})=>!active.map(元素=>0)
返回[
activeData,
无为数据,
]
}

log(split(data))
您可以使用单个循环并使用对象作为目标来减少数组

const
data=[{active:false},{active:false},{active:true},{active:false},{active:true}],
{true:activeData,false:inactiveData}=data.reduce((r,{active})=>
(r[激活]。推动(+激活),r),
{true:[],false:[]}
);
log(activeData);

console.log(不活动数据)除非你的数组很大,否则它不会有任何区别。但是,您确实可以通过阵列一次完成此操作:

const split=(数据)=>
数据减少((rv,条目)=>
(rv[+!entry.active]。推送(+entry.active),rv)
, [[], []]);

log(split([{active:true},{active:false},{active:false}])
您几乎有一种干净的方法来完成此操作,但是使用多个数组函数需要对数据进行更多的循环

Reduce只允许我们这样做一次

const数据=[
{active:false},
{active:false},
{active:true},
{active:false},
{active:true},
]
常量拆分=(数据)=>
data.reduce((acc,{active})=>acc[+!active]。推送(+active)和&acc,[[],[])

console.log(拆分(数据))
是否只需要1和0?请添加所需结果。仅使用数组定义数据:
[false,false,true,false,true]
结果并不特别重要,它可以映射到任何内容。我只是想问一下,是否有可能避免像示例中那样在同一数组中循环两次。这里唯一的要求是
数据
是一个对象数组。Cleaner很可能是基于意见的…而不是
.map()
您可以使用
.fill(1)
.fill(0)
这只返回一个数组,是否可以返回两个数组,和OP方法一样?这是一种有趣的方法,似乎是我想要的。你能详细说明一下这是怎么回事吗?此处的
rv
是否指减速器的两个初始阵列?此外,如果没有演员编号(执行
(rv[+!entry.active].push(+entry.active),rv)
似乎会使它崩溃),这是否意味着它只能处理数字而不能处理布尔值,例如?@MikeK我将对答案做一点解释;这基本上就是
.reduce()
的全部内容。这里的
acc
总是两个数组吗?如果是这样的话,如果你总是按到
acc
,你如何确定要按到哪一个?这只是@Pointy所做的另一个变化。