Изменение значения массива объектов на основе другого массива в javascript

#javascript #ecmascript-6

#javascript #ecmascript-6

Вопрос:

У меня есть два массива.

 let arr1 = [{id: 1, favorite: false}, {id: 2, favorite: false}, {id: 3, favorite: false}];
let arr2 = [1, 3];
 

Если идентификатор существует в arr2 , я хочу изменить favorite на true (этого конкретного объекта)

Например. в приведенном выше случае финал arr1 будет выглядеть так

 [{id: 1, favorite: true}, {id: 2, favorite: false}, {id: 3, favorite: true}];
 

Ответ №1:

Вы можете использовать .map для перебора arr1 и .includes проверки, находится ли элемент id в arr2 :

 const arr1 = [
  {id: 1, favorite: false}, 
  {id: 2, favorite: false}, 
  {id: 3, favorite: false}
];
const arr2 = [1, 3];

const res = arr1.map(e => 
  ({...e, favorite: arr2.includes(e.id)})
);

console.log(res); 

Комментарии:

1. Спасибо, именно то, что я искал!

2. @rohanharikr добро пожаловать. Пожалуйста, отметьте ответ как решение, чтобы закрыть вопрос

Ответ №2:

Вы также можете использовать some такой метод, как:

 const newArr = arr1.map(item =>  { return { ...item, favorite: arr2.some(elem => elem === item.id) } }) 

Ответ №3:

Вы также можете использовать forEach и includes .

 let arr1 = [{id: 1, favorite: false}, {id: 2, favorite: false}, {id: 3, favorite: false}];
let arr2 = [1, 3];

arr1.forEach(x => x.favorite = arr2.includes(x.id))

console.log(arr1);