[英]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.map
和Array.filter
可以處理這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.