я пытаюсь отфильтровать свой массив, который имеет подмассив. я хочу отфильтровать свой массив по подмассиву мой массив выглядит так:
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 из каждой ветки
я хочу получить только статус = 1 из каждой ветки
Ожидаемый выход:
[
{
Name: 'branch1',
Screens: [
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
},
{
Name: 'branch2',
Screens: [
{
Name: 'Screen2',
Player: {
Status: 1
}
}
]
}
]
Спасибо ;)
да, я хочу получить родительский объект вместе с дочерним, который отфильтрован
@NinaScholz, привет, есть ли другое решение для этого? Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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.info(Branches.reduce( (p, c) => ((c.Screens = c.Screens
.filter(s => s.Player.Status == param)).length && p.push(c), p), []
));я получил ошибку: fis не определен, я попытался заменить его на p, но ничего не получил :(
Какой браузер вы используете?
я использовал Гугл Хром
привет майские ветки Скрины убраны после первого фильтра. пример: я хочу статус: 1, в следующем фильтре я хочу статус: 0, но весь статус: 0 был удален?
Извините, я не понял вопроса?
извините, я имею в виду в моем первом статусе фильтра: 1 я получил правильный результат, но когда я фильтрую статус: 0, я ничего не получил, когда я смотрю свои ветки, все экраны со статусом: 0 были удалены
Странно, у меня есть результаты.. ?
Вы можете отображать объекты и фильтровать 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.info(result);спасибо это то что я ищу. , можете ли вы объяснить синтаксис '...o' для чего?
...o берет остальную часть объекта без деструктурированных свойств.
Используя 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();
Хотя Нина показывает, вам это не нужно, так как Array.map и Array.filter могут справиться с этим.
что делать, если у вас нет
Status: 1внутри? вы хотите получить родительский объект? или просто фильтрация внутренних массивов?