Создание массива объектов в JS

1

У меня есть 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
})
  • 0
    Это выглядит довольно хорошо для меня - можете ли вы быть более конкретным по «более простому» пути? У вас проблемы с производительностью?
  • 1
    sidenote, вы не должны определять переменную с помощью const, если она собирается измениться, так как это изменчивый тип данных, который не выдает никакой ошибки.
Теги:
object
arrays
compare

2 ответа

1
Лучший ответ

Вот один из способов:

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)
-3

Вы можете взглянуть на метод 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(()=>{}))
},[])
  • 0
    Ваш код дает Uncaught TypeError: curr.forEach is not a function
  • 0
    Это не прямое решение, это пример того, как решить эту проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню