Задать вопрос
@SergOdinokiy

Как перебрать массив объектов сравнить на совпадения и получить новый массив из совпадений?

Как сравнить массив объектов? В строке объекта сравнить числа на совпадение и получить новый массив объектов?
const arr1=[8,18,26,3,2,16];
Надо сравнить arr1 co строкой us
const arr =[
        {"id":1,"us":"1_8_10_11_14_15_18_19_21_23_24_26_30_34_35-10"},
        {"id":4,"us":"7_9_15_16_17_19_21_23_25_26_29_30_31_33_35-10"},
        {"id":8,"us":"7_9_15_16_17_19_21_23_25_26_29_30_31_33_35-1"},
        {"id":5,"us":"1_8_10_11_14_15_18_19_21_23_24_26_30_34_35-5"},
    ];


И получить новый массив объектов такого плана:
let newarr=[
    {"id":1"us":[8,18,26],'s':[10]},
    {"id":4"us":[26,16],'s':[10]},
    {"id":4"us":[26,16],'s':[1]},
    {"id":1"us":[8,18,26],'s':[5]}
    ]
  • Вопрос задан
  • 353 просмотра
Подписаться 3 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const newArr = [];

for (const n of arr) {
  const [ us, s ] = n.us.split('-').map(n => n.split('_').map(Number));

  newArr.push({
    ...n,
    us: arr1.filter(n => us.includes(n)),
    s,
  });
}

или

const newArr = arr.map(function(n) {
  const us = n.us.match(/\d+/g).map(n => +n);
  const s = us.splice(-1);

  return {
    id: n.id,
    us: this(us),
    s,
  };
}, us => arr1.filter(Set.prototype.has.bind(new Set(us))));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы