[英]Filter Sub array
i am trying to filter my array which has a sub array.我正在尝试过滤具有子数组的数组。 i want to filter my array by sub array my array looks like this:我想通过子数组过滤我的数组我的数组看起来像这样:
var Branches = [
{
Name: 'branch1',
Screens: [
{
Name: 'Screen1',
Player: {
Status: 0
}
},
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
},
{
Name: 'branch2',
Screens: [
{
Name: 'Screen1',
Player: {
Status: 0
}
},
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
}]
i've tried this using linq.js我已经用 linq.js 试过了
var param = 1
var result = Enumerable.From(Branches).Where(function (d) {
return (d.Screen.some(x => x.Player.Status === param))
}).ToArray();
but this code olso gets the status 0 from each branches但是这段代码也从每个分支获得状态 0
i want to get only the status = 1 from each branches我只想从每个分支中获得 status = 1
Expected out :预计:
[
{
Name: 'branch1',
Screens: [
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
},
{
Name: 'branch2',
Screens: [
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
}
]
Thanks ;)谢谢 ;)
var Branches = [ { Name: "branch1", Screens: [ { Name: "Screen1", Player: { Status: 0 } }, { Name: "Screen2", Player: { Status: 1 } } ] }, { Name: "branch2", Screens: [ { Name: "Screen1", Player: { Status: 0 } }, { Name: "Screen2", Player: { Status: 1 } } ] } ]; var param = 1; console.log(Branches.reduce( (p, c) => ((c.Screens = c.Screens .filter(s => s.Player.Status == param)).length && p.push(c), p), [] ));
You could map the objects and filter Screens
.您可以映射对象并过滤Screens
。
var branches = [{ Name: 'branch1', Screens: [{ Name: 'Screen1', Player: { Status: 0 } }, { Name: 'Screen2', Player: { Status: 1 } }] }, { Name: 'branch2', Screens: [{ Name: 'Screen1', Player: { Status: 0 } }, { Name: 'Screen2', Player: { Status: 1 } }] }], wanted = 1, result = branches.map(({ Screens, ...o }) => ({ ...o, Screens: Screens.filter(({ Player: { Status } }) => Status === wanted) })); console.log(result);
Using linq.js, you need to view it as selecting branches with a filtered set of screens.使用 linq.js,您需要将其视为选择带有一组过滤屏幕的分支。 You probably don't want to modify the existing items so you should create new ones.您可能不想修改现有项目,因此您应该创建新项目。
let status = 1;
let result = Enumerable.From(Branches)
.Select(({Screens, ...rest}) => ({
Screens: Enumerable.From(Screens)
.Where(({Player:{Status}}) => Status === status)
.ToArray(),
...rest
})).ToArray();
Though Nina shows, you don't really need this as Array.map
and Array.filter
can handle this.尽管 Nina 展示了,你并不真正需要它,因为Array.map
和Array.filter
可以处理这个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.