Angular фильтрация массива, но исключение первого элемента из фильтра - PullRequest
0 голосов
/ 04 августа 2020

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

Например, массив (oData) может выглядеть так:

[
 {id: "abc1", type: "car"},
 {id: "h445", type: "car"},
 {id: "kjj6", type: "van"},
 {id: "5yee", type: "bus"}
]

I ' m применение фильтра для удаления элементов, тип которых находится в списке выбранных пользователем параметров, следующим образом:

this.dataSet = this.oData.filter((d) => this.sOptions.includes(d.type));

Если пользователь выбрал «фургон» и «автобус», набор данных выглядит следующим образом:

[
 {id: "kjj6", type: "van"},
 {id: "5yee", type: "bus"}
]

Однако я хочу, чтобы первый элемент {id: "abc1", type: "car"} всегда оставался, т.е. я хочу, чтобы он был исключен из фильтра.

Я пробовал фильтровать, а затем использовал unShift () для добавьте его обратно, но он ведет себя странно.

Есть ли лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

В функцию обратного вызова filter передается 2-й аргумент, который представляет индекс текущего элемента. Вы можете использовать для исключения первого элемента.

let data = [
 {id: "abc1", type: "car"},
 {id: "h445", type: "car"},
 {id: "kjj6", type: "van"},
 {id: "5yee", type: "bus"}
];

let selectedOptions = [
    "van",
    "bus"
]

let filtered = data.filter((item, idx) => {
    return idx === 0 || selectedOptions.indexOf(item.type) > -1;
});

console.log(JSON.stringify(filtered));
//PRINTS: [{"id":"abc1","type":"car"},{"id":"kjj6","type":"van"},{"id":"5yee","type":"bus"}] 
1 голос
/ 04 августа 2020

Вы можете сделать это так:

arr.filter(num => num !== arr[0] && yourConditionHere)
0 голосов
/ 04 августа 2020

В ES6 это можно сделать так

var arr2 = this.oData.filter(a => a.type == "van" || a.type == "bus");
this.dataSet = [this.oData[0], ...arr2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...