Javascript контроль равенства массива и изменение значения - PullRequest
0 голосов
/ 24 апреля 2020

Привет, у меня есть два массива изменяемой длины, и я попытался. Если нет нужного значения, удалите его из этого массива и измените значение суммы, если оно изменило массив. 2 ​​одинаковые серийные номера кода

array1 = [
    {
      "serial": "3",
      "sum": "1"
    },
    {
      "serial": "700",
      "sum": "2"
    },
    {
      "serial": "300",
      "sum": "1"
    },
]

array2 = [{
      "someting": 10,
      "sum": "3",
      "serialList": ["700","711"],
    },

   {
      "someting": 10,
      "sum": "1",
      "serialList": ["300"],
    },
    {
      "someting": 10,
      "sum": "2",
      "serialList": [],
    }
]  

мои два массива, как я уже сказал, длина массива изменяема, иногда длина массива1 большая, иногда массив2, и я хочу, если серийный номер в массиве1 не существует в массиве2, удалить из элемента массива1 и изменить значение суммы, если он изменил код массива2 того же серийного номера, в соответствии с выше массива1 [0] последовательных кодов не существует и массив1 [1] значение суммы отличается от массива2 [0] изменение значения суммы на сумму значений массив1 [1] на массив2 [0], серийный номер 300 на ту же сумму суммы на массив не существует сделать все, что я хочу, чтобы вывести массив1:

array1 = [
    {
      "serial": "700",
      "sum": "3"
    },
    {
      "serial": "300",
      "sum": "1"
    },
]

1 Ответ

1 голос
/ 24 апреля 2020

Использование flatMap

array1.flatMap(el => {
  // find array2 element with array1 element's serial
  const array2el = array2.find(({ serialList }) =>
    serialList.includes(el.serial)
  );
  if (array2el) {
    if (array2el.sum !== el.sum) {
      el.sum = array2el.sum; // sum different, update
    }
  } else {
    return []; // return [] to delete
  }
  return [el]; // return [el] to keep
});

const array1 = [
  {
    serial: "3",
    sum: "1"
  },
  {
    serial: "700",
    sum: "2"
  },
  {
    serial: "300",
    sum: "1"
  }
];

const array2 = [
  {
    someting: 10,
    sum: "3",
    serialList: ["700", "711"]
  },

  {
    someting: 10,
    sum: "1",
    serialList: ["300"]
  },
  {
    someting: 10,
    sum: "2",
    serialList: []
  }
];

const processedArray1 = array1.flatMap(el => {
  const array2el = array2.find(({ serialList }) =>
    serialList.includes(el.serial)
  );
  if (array2el) {
    if (array2el.sum !== el.sum) {
      el.sum = array2el.sum;
    }
  } else {
    return []; // delete
  }
  return [el]; // return el
});

console.log(processedArray1);

Использование уменьшения

const processedArray1 = array1.reduce((acc, el) => {
  // find array2 element with array1 element's serial
  const array2el = array2.find(({ serialList }) =>
    serialList.includes(el.serial)
  );
  if (array2el) {
    if (array2el.sum !== el.sum) {
      el.sum = array2el.sum; // sum different, update
    }
    acc.push(el); // push into filtered array if found in array2
  } 
  return acc;
}, []);

const array1 = [
  {
    serial: "3",
    sum: "1"
  },
  {
    serial: "700",
    sum: "2"
  },
  {
    serial: "300",
    sum: "1"
  }
];

const array2 = [
  {
    someting: 10,
    sum: "3",
    serialList: ["700", "711"]
  },

  {
    someting: 10,
    sum: "1",
    serialList: ["300"]
  },
  {
    someting: 10,
    sum: "2",
    serialList: []
  }
];

const processedArray1 = array1.reduce((acc, el) => {
  const array2el = array2.find(({ serialList }) =>
    serialList.includes(el.serial)
  );
  if (array2el) {
    if (array2el.sum !== el.sum) {
      el.sum = array2el.sum;
    }
    acc.push(el)
  } 
  return acc;
}, []);

console.log(processedArray1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...