Как отфильтровать элемент в зависимости от предыдущего элемента в массиве массивов - PullRequest
0 голосов
/ 03 апреля 2020

Допустим, у вас есть следующий код для фильтрации животных, чтобы только сохранить в массиве тех, кто имеет больший вес, чем предыдущее животное (первый объект никогда не будет сохранен, так как нет предыдущего животного):

    const animals = [
        { id: 3, weight: 300, type: 'pig' },
        { id: 1, weight: 200, type: "cow" },
        { id: 7, weight: 400, type: "horse" },
        { id: 6, weight: 100, type: "pig" },
    ];


const filteredAnimals = animals.filter((animal, index) => 
    animals[index - 1] && animal.weight > animals[index - 1].weight);

console.log('filtered animals: ', filteredAnimals);

Это работает, как и ожидалось, но я не могу понять, как применить тот же фильтр, имеющий массив массивов:

const animals = [
    [
        { id: 5, weight: 300, type: 'pig' },
        { id: 1, weight: 200, type: "cow" },
        { id: 3, weight: 400, type: "horse" },
        { id: 4, weight: 350, type: "pig" },
    ],
    [
        { id: 2, weight: 250, type: "horse" },
        { id: 6, weight: 350, type: 'pig' },
        { id: 8, weight: 250, type: "cow" },
        { id: 7, weight: 400, type: "pig" },
    ]
]

В этом случае ожидаемый результат должен быть:

const filteredAnimals = [
    [
        { id: 3, weight: 400, type: "horse" },
    ],
    [
        { id: 6, weight: 350, type: "pig" },
        { id: 7, weight: 400, type: "pig" },
    ]
]

Любые предложения о том, как этого добиться?

1 Ответ

3 голосов
/ 03 апреля 2020

Просто поместите ваш filter в .map, чтобы перебрать все подмассивы:

const animals = [
    [
        { id: 5, weight: 300, type: 'pig' },
        { id: 1, weight: 200, type: "cow" },
        { id: 3, weight: 400, type: "horse" },
        { id: 4, weight: 350, type: "pig" },
    ],
    [
        { id: 2, weight: 250, type: "horse" },
        { id: 6, weight: 350, type: 'pig' },
        { id: 8, weight: 250, type: "cow" },
        { id: 7, weight: 400, type: "pig" },
    ]
]


const filteredAnimals = animals.map(
  subarr => subarr.filter((animal, index) => 
    subarr[index - 1] && animal.weight > subarr[index - 1].weight
  )
);
console.log(filteredAnimals);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...