изменение значений в массиве на основе другого массива js

#javascript #arrays #sorting

#javascript #массивы #сортировка

Вопрос:

Здравствуйте, я пытаюсь отредактировать некоторые значения в массиве на основе другого массива, у меня есть это:

 tags = [
  { name: 'Music', value: 1, actif: 0 },
  { name: 'Sport', value: 2, actif: 0 },
  { name: 'Games', value: 3, actif: 0 },
  { name: 'Animals', value: 4, actif: 0 },
  { name: 'Party', value: 5, actif: 0 },
  { name: 'Arts', value: 6, actif: 0 },
  { name: 'Movies', value: 7, actif: 0 },
  { name: 'Travels', value: 8, actif: 0 },
  { name: 'Cooking', value: 9, actif: 0 },
  { name: 'Dance', value: 10, actif: 0 }
]
person = [
  { idui: 7619, iduser: 101, interest: 5 },
  { idui: 7620, iduser: 101, interest: 3 },
  { idui: 7621, iduser: 101, interest: 4 },
  { idui: 7622, iduser: 101, interest: 1 },
  { idui: 7623, iduser: 101, interest: 2 }
]
  

Я хотел бы установить tags.actif равным 1, если person.interest == tags.value . Я думаю, мне придется использовать каждый из find, но я действительно не знаю, как добиться успеха в этом.

Ответ №1:

Вы можете сопоставить каждый объект в массиве тегов с новым объектом с обновленным actif значением, если это человек с тем же интересом, что и значение тега. Вы можете найти это с помощью метода array.find()

 const tags = [
  { name: 'Music', value: 1, actif: 0 },
  { name: 'Sport', value: 2, actif: 0 },
  { name: 'Games', value: 3, actif: 0 },
  { name: 'Animals', value: 4, actif: 0 },
  { name: 'Party', value: 5, actif: 0 },
  { name: 'Arts', value: 6, actif: 0 },
  { name: 'Movies', value: 7, actif: 0 },
  { name: 'Travels', value: 8, actif: 0 },
  { name: 'Cooking', value: 9, actif: 0 },
  { name: 'Dance', value: 10, actif: 0 },
];

const persons = [
  { idui: 7619, iduser: 101, interest: 5 },
  { idui: 7620, iduser: 101, interest: 3 },
  { idui: 7621, iduser: 101, interest: 4 },
  { idui: 7622, iduser: 101, interest: 1 },
  { idui: 7623, iduser: 101, interest: 2 },
];

const changed = tags.map((tag) => {
  const person = persons.find(({ interest }) => interest === tag.value);
  
  return person ? {...tag, actif: 1} : tag;
});

console.log(changed);  
 .as-console-wrapper {max-height: 100% !important;}