#javascript
#javascript
Вопрос:
Я пытаюсь фильтровать arr2
. Если у элемента нет идентификатора, указанного в arr
, я хочу, чтобы он был удален. Как я мог бы сделать это в javascript?
var arr= ["a", "b", "d"]
var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]
result:
[{id:"a", value:1},{id:"b", value:2}]
Заранее спасибо 🙂
Ответ №1:
Вы можете использовать reduce
и в функции обратного вызова проверить, соответствует ли arr
includes
id
объект итерации. Если да, то добавьте элементы в массив накопителей
var arr = ["a", "b", "d"]
var arr2 = [{
id: "a",
value: 1
}, {
id: "b",
value: 2
}, {
id: "c",
value: 3
}];
const newData = arr2.reduce((acc, curr) => {
if (arr.includes(curr.id)) {
acc.push(curr)
}
return acc;
}, []);
console.log(newData)
Ответ №2:
если элементы arr всегда являются строками, вы можете сделать это:
var arr = ["a", "b", "d"];
var arr2 = [{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}];
let str = arr.join('')
let filtered = arr2.filter(x => str.includes(x.id));
console.log(filtered)
Ответ №3:
это должно сделать это
var arr= ["a", "b", "d"]
var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]
const filteredArray = arr2.filter(obj => {
return arr.includes(obj.id)
})
Ответ №4:
Использование filter, reduce и includes почти в два раза медленнее, чем простое использование цикла. Чтобы провести вас по нему, все, что он делает, это проверяет каждый элемент во втором массиве и проверяет, есть ли его свойство id в первом массиве, и если есть, он его клонирует. Кроме того, для дальнейшего использования этот заголовок написан плохо. Гораздо лучшим названием было бы «Как фильтровать массив объектов на основе списка возможных свойств идентификатора»
var arr= ["a", "b", "d"]
var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]
let clone = []
for(let i = 0;i < arr2.length;i ){
for(let j = 0;j < arr.length; j ) if(arr2[i].id === arr[j]) clone.push(arr2[j])
}
console.log(clone)