У меня есть 2 массива:
let array1 = ["a", "b", "c"]
const array2 = [{a: 23, b: 22, c: 14}, {a: 78, b: 22, c: 14}, {id: 3, a: 23, b: 80, c: 14}]
И мне нужно обновить array1 в соответствии со следующими условиями:
для каждого элемента из массива мне нужно вернуть объект:
[{name: 'a', isDifferent: true}, {name: 'b', isDifferent: true}, {name: 'c', isDifferent: false}]
где isDifferent истинно, для данного имени по меньшей мере одно значение отличается.
Это моя функция. Оно работает.
Но я думаю, что есть более простые способы сделать это.
array1 = array1.map(el => {
const newObj = {}
newObj.name = el
let isDifferent = false
for (let i = 0; i < array2.length; i++) {
if (array2[i][el] !== array2[0][el]) {
isDifferent = true
break
}
}
newObj.isDifferent = isDifferent
return newObj
})
Вот один из способов:
const array1 = ["a", "b", "c"]
const array2 = [{a: 23, b: 22, c: 14}, {a: 78, b: 22, c: 14}, {id: 3, a: 23, b: 80, c: 14}]
let result = array1.map( letter => {
let values = array2.map(obj => obj[letter]); // Getting [23, 78, 3] for "a"
return {
name : letter,
isDifferent : !values.every(v => v===values[0]) // Checks if every value in the array equals the first one
}
})
console.log(result)
Вы можете взглянуть на метод reduce
массивов javascript. уменьшить
const array2 = [{a: 23, b: 22, c: 14}, {a: 78, b: 22, c: 14}, {id: 3, a: 23, b: 80, c: 14}]
const arr = array2.reduce((acc,curr)=>{
acc.push(curr.forEach(()=>{}))
},[])
Uncaught TypeError: curr.forEach is not a function