簡體   English   中英

過濾子數組

[英]Filter Sub array

我正在嘗試過濾具有子數組的數組。 我想通過子數組過濾我的數組我的數組看起來像這樣:

 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
                        }
                    }
                ]
            }]

我已經用 linq.js 試過了

var param = 1
var result = Enumerable.From(Branches).Where(function (d) {

                return (d.Screen.some(x => x.Player.Status === param))

            }).ToArray();

但是這段代碼也從每個分支獲得狀態 0

我只想從每個分支中獲得 status = 1

預計:

[
            {
                Name: 'branch1',
                Screens: [
                    {
                        Name: 'Screen2',
                        Player: {
                            Status: 1
                        }
                    }
                ]
            },
            {
                Name: 'branch2',
                Screens: [
                    {
                        Name: 'Screen2',
                        Player: {
                            Status: 1
                        }
                    }
                ]
            }

        ]

謝謝 ;)

 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), [] ));

您可以映射對象並過濾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);

使用 linq.js,您需要將其視為選擇帶有一組過濾屏幕的分支。 您可能不想修改現有項目,因此您應該創建新項目。

let status = 1;
let result = Enumerable.From(Branches)
    .Select(({Screens, ...rest}) => ({
        Screens: Enumerable.From(Screens)
            .Where(({Player:{Status}}) => Status === status)
            .ToArray(),
        ...rest
    })).ToArray();

盡管 Nina 展示了,你並不真正需要它,因為Array.mapArray.filter可以處理這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM