Javascript 从对象数组中获取匹配属性,并将它们放入新数组中

Javascript 从对象数组中获取匹配属性,并将它们放入新数组中,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有一个具有以下结构的对象数组: let arr = [ {name: "abc", show: true , display:"ABC"}, {name: "xyz", show: false , display:"XYZ"}, {name: "pqr", show: true , display:"PQR"}, {name: "lmn", show: false , display:"LMN"} ] 我希望输出为两个数组,一个用于show:true,另一个用于show:fa

我有一个具有以下结构的对象数组:

let arr = [
  {name: "abc", show: true , display:"ABC"},
  {name: "xyz", show: false , display:"XYZ"},
  {name: "pqr", show: true , display:"PQR"},
  {name: "lmn", show: false , display:"LMN"}
]
我希望输出为两个数组,一个用于
show:true
,另一个用于
show:false
,即基于
show
属性的值。理想情况下,使用一个函数同时提供两个数组将非常好。我期待下一个输出:

arr1 = ["abc", "pqr"]
arr2 = ["xyz", "lmn"]
我目前的做法是:

// Approach I have tried so far:

var results = arr.filter(function(entry) { 
    return entry.show === false;
});

但是这给了我一个对象数组,我想要一个名为
的数组。有人能帮我吗?

试试这个:

让arr=[{name:“abc”,show:true,display:“abc”},
{name:“xyz”,show:false,display:“xyz”},
{name:“pqr”,show:true,display:“pqr”},
{name:“lmn”,show:false,display:“lmn”}
]
常量匹配=(bool)=>arr.filter(res=>res.show==bool.map(ele=>ele.name);
console.log(匹配(true));

console.log(匹配(false))
ForEach
每个对象,然后检查show属性。如果
show==true
则将内容推送到一个数组,否则推送到另一个数组

让arr=[{name:“abc”,show:true,display:“abc”},{name:“xyz”,show:false,display:“xyz”},{name:“pqr”,show:true,display:“pqr”},{name:“lmn”,show:false,display:“lmn”}]
设arr1=[],arr2=[];
arr.forEach((val,intt)=>{
如果(val.show){
arr1.推送(val.name)
}否则{
arr2.推送(val.name)
}
})
控制台日志(arr1);

控制台日志(arr2)
您可以使用
.reduce
构建多维数组,然后将
名称
按入索引
0
如果show为
false
,则按入索引
1
如果show为
true
,如下所示:

让arr=[
{name:“abc”,show:true,display:“abc”},
{name:“xyz”,show:false,display:“xyz”},
{name:“pqr”,show:true,display:“pqr”},
{name:“lmn”,show:false,display:“lmn”}
];
让[arr2,arr1]=arr.reduce(
(acc,{name,show})=>(acc[+show].push(name,acc),
[[], []]);
console.log(arr1);//[“abc”、“pqr”]

console.log(arr2);//[“xyz”、“lmn”]
一种可能的解决方案是使用所需的数组生成对象,然后您可以稍后访问这些数组

让arr=[
{name:“abc”,show:true,display:“abc”},
{name:“xyz”,show:false,display:“xyz”},
{name:“pqr”,show:true,display:“pqr”},
{name:“lmn”,show:false,display:“lmn”}
];
var res=arr.reduce((acc,{show,name})=>
{
如果(显示)
acc.show.push(名称);
其他的
acc.noShow.push(名称);
返回acc;
},{show:[],noShow:[]});
log(“show=>true”,res.show);
log(“show=>false”,res.noShow)
.as控制台{背景色:黑色!重要;颜色:石灰;}

.as控制台包装器{max height:100%!important;top:0;}
使用Ramda.js这样的库可以使解决方案简洁美观

const arr=[
{name:“abc”,show:true,display:“abc”},
{name:“xyz”,show:false,display:“xyz”},
{name:“pqr”,show:true,display:“pqr”},
{name:“lmn”,show:false,display:“lmn”}
]
常数f=R.管道(
右分区(右道具(“显示”),
R.map(R.Pull(“名称”))
)
console.log(f(arr))
非常好(和智能)的解决方案!