Подмножество фильтров

я пытаюсь отфильтровать свой массив, который имеет подмассив. я хочу отфильтровать свой массив по подмассиву мой массив выглядит так:

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

        ]

Спасибо ;)

что делать, если у вас нет Status: 1 внутри? вы хотите получить родительский объект? или просто фильтрация внутренних массивов?

Nina Scholz 26.06.2019 11:53

да, я хочу получить родительский объект вместе с дочерним, который отфильтрован

Leo Jr Aguanta 26.06.2019 11:56

@NinaScholz, привет, есть ли другое решение для этого? Спасибо

Leo Jr Aguanta 26.06.2019 13:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
84
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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, но ничего не получил :(

Leo Jr Aguanta 26.06.2019 12:10

Какой браузер вы используете?

Ziv Ben-Or 26.06.2019 12:11

я использовал Гугл Хром

Leo Jr Aguanta 26.06.2019 12:14

привет майские ветки Скрины убраны после первого фильтра. пример: я хочу статус: 1, в следующем фильтре я хочу статус: 0, но весь статус: 0 был удален?

Leo Jr Aguanta 26.06.2019 12:33

Извините, я не понял вопроса?

Ziv Ben-Or 26.06.2019 12:37

извините, я имею в виду в моем первом статусе фильтра: 1 я получил правильный результат, но когда я фильтрую статус: 0, я ничего не получил, когда я смотрю свои ветки, все экраны со статусом: 0 были удалены

Leo Jr Aguanta 26.06.2019 12:59

Странно, у меня есть результаты.. ?

Ziv Ben-Or 26.06.2019 13:12
Ответ принят как подходящий

Вы можете отображать объекты и фильтровать 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' для чего?

Leo Jr Aguanta 26.06.2019 13:59
...o берет остальную часть объекта без деструктурированных свойств.
Nina Scholz 26.06.2019 14:01

Используя 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 могут справиться с этим.

Другие вопросы по теме