Javascript сравнить 2 массива по индексу, а не по общему количеству значений, которые имеют 2 массива - PullRequest
0 голосов
/ 18 января 2020

Итак, у меня есть этот код, который возвращает результат сравнения 2 массивов. функция сравнивает, сколько значений имеют два общих массива, а затем выводит процент общих значений.

const array1 = [1, 2, 3, 7, 1];
const array2 = [1, 3, 6, 7, 6];

const compareThem = (num1, num2) => {
  let finalArray = [];
  num1.forEach((e1) => num2.forEach((e2) => {
    if (e1 === e2) {
      finalArray.push(e1)
    }
  }))
  const divideThem = Math.floor((finalArray.length / num1.length) * 100)
  const toPercent = (divideThem.toFixed(1) + '%')
  return toPercent;

};
console.log(compareThem(array1, array2))

Но я бы хотел сделать что-то другое. Я хотел бы go индексировать по индексу и сделать так, чтобы код говорил: array1 [0] === array2 [0], [1] === [1] и так далее. Я не ищу общее количество общих значений, а общее количество общих индексов. Я не хочу, чтобы код говорил array1 [1] === array2 [3]. Как лучше всего подойти к этой проблеме? Прежде всего, я думаю, что мне придется использовать что-то кроме foreach?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Просто сравните e1 с элементом в другом массиве с тем же индексом. Все итерационные функции массива передают индекс в качестве аргумента для обратного вызова.

Если вам просто нужен счетчик, нет необходимости вставлять pu sh в массив. Вы можете использовать reduce() для суммирования соответствующего числа.

const array1 = [1, 2, 3, 7, 1];
const array2 = [1, 3, 6, 7, 6];

const compareThem = (num1, num2) => {
  let counter = num1.reduce((total, e1, index) => e1 === num2[index] ? total + 1: total, 0)
  const divideThem = Math.floor((counter / num1.length) * 100)
  const toPercent = (divideThem.toFixed(1) + '%')
  return toPercent;

};
console.log(compareThem(array1, array2))
1 голос
/ 18 января 2020

Функция обратного вызова получила второй аргумент, который является индексом. Вы можете использовать этот индекс для сравнения значения со значением второго массива.

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

const compareThem = (a1, a2) => {
  let commonIndices = [];
  a1.forEach((element, i) => {
    if (element === a2[i]) {
      commonIndices.push(element)
    }
  });
  return commonIndices;
};
...