помогите пожалуйста. Есть 2 массива, один с объектами другой числовой. В числовом хранятся number из массива с объектами.
Как мне правильно найти посредством числового массива индекс объекта и изменить в объекте selected: true?
Сейчас с newArr происходит чудо, но сам arr меняет значение selected
var arr = [{
name: 'Hello',
selected: false,
number: 14
}, {
name: 'World',
selected: false,
number: 18
}, {
name: '!',
selected: false,
number: 31
}]
var numbers = [14, 31];
var newArr = arr.map((item, index) => numbers.map((number) => item.number == number ? arr[index].selected = true : arr[index]))
console.log(newArr)
Тут нужно понимать несколько вещей:
Чудеса стали возможны потому, что не были учтены базовые особенности map и стрелочных функций. Ну и явно не является эффективным решением перебор массива numbers для каждого элемента массива arr.
Из вопроса не совсем понятно какой именно вы хотите получить результат по этому продемонстрирую 3 (более эффективных) варианта:
Поехали!
Изменяем selected в arr:
var arr = [{name: 'Hello', number: 14}, {name: 'World', number: 18}, {name: '!', number: 31}];
var numbers = [14, 31];
arr.forEach(x => x.selected = numbers.indexOf(x.number) > -1);
console.log(arr);
Cоздаём newArr из объектов массива arr:
var arr = [{name: 'Hello', number: 14}, {name: 'World', number: 18}, {name: '!', number: 31}];
var numbers = [14, 31];
var newArr = arr.map(x => {
x.selected = numbers.indexOf(x.number) > -1;
return x;
});
console.log(newArr);
console.log(arr);
Cоздаём newArr из копий объектов массива arr:
var arr = [{name: 'Hello', number: 14}, {name: 'World', number: 18}, {name: '!', number: 31}];
var numbers = [14, 31];
var newArr1 = arr.map(x => {
var o = Object.assign({}, x);
o.selected = numbers.indexOf(o.number) > -1;
return o;
});
var newArr2 = arr.map(x => Object.assign({selected: (numbers.indexOf(x.number) > -1)}, x));
var newArr3 = arr.map(x => {
return { ...x , selected: (numbers.indexOf(x.number) > -1) };
});
console.log(newArr2);
console.log(arr);
Вот таким образом:
var arr = [{
name: 'Hello',
selected: false,
number: 14
}, {
name: 'World',
selected: false,
number: 18
}, {
name: '!',
selected: false,
number: 31
}]
var numbers = [14, 31];
var newArr = arr.map((item, index) => {
numbers.map((number) => { if (item.number == number) arr[index].selected = true; return arr[index];}); return item;} );
console.log(newArr)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости