Я пытаюсь получить результат из 2-х массивов - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь отфильтровать первый массив на основе текста второго массива, но я не понимаю, как обновить фильтр подсчета до первого массива из второго массива.

Первый массив:

var firstArray =[{text:"India",count:1,checked:true},
{text:"America",count:2,checked:false},
{text:"Uk",count:1,checked:true}];

Второй массив:

var secondArray=[
{text:"India",count:1,checked:false},
{text:"America",count:1,checked:false},
{text:"Uk",count:1,checked:false}
];

Код:

var result=firstArray.filter(o1 => secondArray.some(o2 => o1.text === o2.text));

Результат, который я получаю в настоящее время:

var result=[
{text:"India",count:1,checked:true},
{text:"America",count:2,checked:false},
{text:"Uk",count:1,checked:true}
];

Результат, который я пытаюсь получить, ниже:

var result=[
{text:"India",count:1,checked:true},
{text:"America",count:1,checked:false},
{text:"Uk",count:1,checked:true}
];

Спасибо за помощь !!!

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Возможное решение:

var firstArray = [{
    text: "India",
    count: 1,
    checked: true
  },
  {
    text: "America",
    count: 2,
    checked: false
  },
  {
    text: "Uk",
    count: 1,
    checked: true
  }
];

var secondArray = [{
    text: "India",
    count: 1,
    checked: false
  },
  {
    text: "America",
    count: 1,
    checked: false
  },
  {
    text: "Uk",
    count: 1,
    checked: false
  }
];

var result = firstArray.map(o1 => {
  const o2 = secondArray.find(o2 => o1.text === o2.text);
  if (!o2) return;
  return { ...o1,
    count: o2.count
  }
}).filter(o1 => !!o1);

console.log(result)
1 голос
/ 10 июля 2020

Вы можете сопоставить первый массив и выбрать счетчик из второго массива следующим образом

var firstArray = [
  { text: "India", count: 1, checked: true },
  { text: "America", count: 2, checked: false },
  { text: "Uk", count: 1, checked: true },
];

var secondArray = [
  { text: "India", count: 1, checked: false },
  { text: "America", count: 1, checked: false },
  { text: "Uk", count: 1, checked: false },
];

firstArray
  .map((x) => {
    const tmp = secondArray.find((y) => y.text === x.text);
    return tmp ? { ...x, count: tmp.count } : null
})
  .filter(Boolean);

0 голосов
/ 10 июля 2020

Это решение объединит два массива, чтобы получить желаемый результат (как выведено из ответа)

var firstArray =[{text:"India",count:1,checked:true},
{text:"America",count:2,checked:false},
{text:"Uk",count:1,checked:true}];

var secondArray=[
{text:"India",count:1,checked:false},
{text:"America",count:1,checked:false},
{text:"Uk",count:1,checked:false}
];

const newArray = firstArray.map((el1) => {
  let sameElList = secondArray.filter((el2) => el2.text === el1.text);
  let sameEl = sameElList.length > 0 && sameElList.pop();
  if(!sameEl){
    return el1;
  }
  el1.count = Math.min(el1.count, sameEl.count);
  el1.checked = el1.checked || sameEl.checked;
  return el1;
 });
 
 console.log(newArray);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...