@Nikolay37

Каким образом в массиве с объектами найти одинаковые элементы?

Имеется массив вида:
[{ name: 'Car',
    color1: 'Red',
    color2: 'Blue',
    speed1: 100,
    speed2: 230,
    image: '1111',
    id:10
 },
{ name: 'Car2',
    color1: 'Black',
    color2: 'Silver',
    speed1: 100,
    speed2: 230,
    image: '1131',
    id:10
 },
{ name: 'Car3',
    color1: 'Black',
    color2: 'Silver',
    speed1: 100,
    speed2: 230,
    image: '1131',
    id:10
 },
{ name: 'Car4',
    color1: 'Red',
    color2: 'Blue',
    speed1: 200,
    speed2: 350,
    image: '1114',
    id:10
 }]

Нужно найти аналоги элементов color1 и color2, чтобы они были одинаковыми и это вывести в общий объект вида (тут image от 1-го и от 2-го объекта):
{ name: 'Car',
    color1: 'Red',
    color2: 'Blue',
    speed1: 200,
    speed2: 350,
    image1: '1111',
    image2: '1114'
 }

Не исключено то, что может быть 3,4,5 и т.д. одинаковых элементов, как быть в данном случае?
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 2
@andreysuha
Что то знаю
Комментировать
@krka92
А так же может быть и image 3-го и n-го объекта. Чтобы не мудрить с полями можно все image записывать в массив.
Ну и при условии что изображения все-таки будут в массиве, то можно сделать что то вроде:
function findObject(src, obj) {
  for (var i = 0; i < src.length; i++) {
    if ((src[i].color1 === obj.color1) && (src[i].color2 === obj.color2)) {
      return src[i];
    }
  }
}

function addObject(dest, obj) {
  dest.push(obj);
  return obj;
}

function mergeImage(objDest, objSrc) {
  objDest.image.push(...objSrc.image);  //Здесь отредактировано
}

function tryFindObj(src, dest, obj) {
  let findedObj = findObject(src, obj);
  if (!findedObject) {
    findedObject = addObject(dest, obj);
  }
  return findedObject;
}

function findSimilarObj(arr) {
  const resultArr = [];
  let tmpObj;
  for (var i = 0; i < arr.length; i++) {
    tmpObj = tryFindObj(arr, resultArr, arr[i]);
    mergeImage(tmpObj, arr[i]);
  }
}

Это можно упростить или использовать сторонние компоненты. Но логика тут ясна
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы