简体   繁体   English

过滤子数组

[英]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.mapArray.filter可以处理这个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM