Проверьте, сколько раз значение в массиве появляется в другом массиве

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

arr1 = [1, 2, 3, 4, 5];

arr2 = [1, 7, 8, 9, 10];


count = 0;

for (x in arr2){
        for (y in arr1){
                if (x == y){
                        count +=1;
                }
        }
}

console.log(count);

Еще одна вещь, которую я пробовал, была это.

(arr1.some((val)=>{return arr2.includes(val);} ))

Он проверяет, совпадает ли хотя бы одно значение, но я не был уверен, как реализовать для него подсчет.

Моя цель — увидеть, сколько раз значение из arr2 появляется в arr1. В этом случае он должен вернуть 1.

for ... in перебирает имена свойств (индексы массива). Вы хотите for ... of.
Pointy 17.05.2022 18:27

Связанные подрешения в Как посчитать определенные элементы в массиве?

jarmod 17.05.2022 18:28

какой результат вы ожидаете?

Nina Scholz 17.05.2022 18:49

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

epascarello 17.05.2022 18:58

Вопрос не ясен. Вам нужно общее количество пересечений или промежуточные итоги для каждого пересечения? И всегда ли массив 1 имеет уникальные значения? Если нет, то как следует подсчитывать повторяющиеся значения?

Yogi 17.05.2022 19:09
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
5
37
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать Array.prototype.reduce в сочетании с Массив.прототип.фильтр, чтобы получить объект повторяющихся значений.

const arr1 = [1, 2, 3, 4, 5, 1, 1, 1, 9, 9]; // Repeated values
const arr2 = [1, 7, 8, 9, 10]; // Unique values

const appearances = (arrUnique, arrRepeated) => arrUnique.reduce((ob, valUnique) => {
  ob[valUnique] = arrRepeated.filter(v => valUnique === v).length;
  return ob;
}, {});

console.log(appearances(arr2, arr1));    // {value: counts, ...}
console.log(appearances(arr2, arr1)[1]); // 4

который вернет:

{
  "1": 4,   // repeats 4 times
  "7": 0,
  "8": 0,
  "9": 2,   // repeats 2 times
  "10": 0
}
Ответ принят как подходящий

x и y будут индексами циклов при использовании этого синтаксиса. Так что получите то, что вы есть после того, как вы могли бы сделать это вот так.

    const arr1 = [1, 2, 3, 4, 5];

const arr2 = [1, 7, 8, 9, 10];


count = 0;

for (x in arr2){
        for (y in arr1){
                if (arr2[x] === arr1[y]){
                        count +=1;
                }
        }
}

console.log(count);

 

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

const
    array1 = [1, 2, 3, 4, 5],
    array2 = [1, 7, 8, 9, 10],
    result = array1.reduce(
        (r, v) => (v in r && r[v]++, r),
        Object.fromEntries(array2.map(v => [v, 0]))
    );

console.log(result);

Детали прокомментированы в примере и напечатаны на консоли. Использование концепции reduce() и Map() было из здесь.

// Utility function
const log = data => console.log(JSON.stringify(data));

log(`const arr1 = [1, 2, 3, 4, 5];`);
log(`const arr2 = [1, 7, 8, 9, 10];`);
log(`const arr3 = [1, 2, 3, 4, 5, 6, 7];`)
log(`const arr4 = [1, 7, 8, 9, 10];`);

const arr1 = [1, 2, 3, 4, 5];
const arr2 = [1, 7, 8, 9, 10];
const arr3 = [1, 2, 3, 4, 5, 6, 7];
const arr4 = [1, 7, 8, 9, 10];

const times = (arrA, arrB) => 
  // Returns n if...  
  arrB.filter(n => 
    // ...n exists in arrA
    arrA.includes(n))
    // Return how many matches
    .length;
    
log(`@param: arr1, arr2`)
log(times(arr1, arr2));
log(`@param: arr3, arr4`)
log(times(arr3, arr4));

// ...Rest operator will accept an unlimited amount
const frequency = (...arrays) => {
  // Combine params into one array
  let array = [...arrays.flat()],
  min;
  // If the first param is a string...
  if (''+array[0] === array[0]) {
    /*
    ...remove it from the array and convert it into a number.
    Otherwise it's 1
    */
    min = +array.shift();
  } else min = 1;
  
  // 4. Convert Map into an array of [key, value] pairs
  return  [...array
    .reduce((grp, val) => 
      /*
      3. Set [value] on Map to the it's current value +1
      */
      grp.set(val, 
        /*
        2. Get [value] from Map, but if it doesn't exist yet then it's a 
           zero.
        */
        (grp.get(val) || 0) + 1)
        // 1. Create Map object
        , new Map()
    )]
    // 5. Return each pair that meets or exceeds min
    .filter(([key, val]) => val >= min);
}

log(`@param: arr1, arr2`);
log(frequency(arr1, arr2));

log(`@param: arr3, arr4`);
log(frequency(arr3, arr4));

log(`frequency() will accept anything in unlimited amounts`);
log(`@param: arr1, arr2, arr3, arr4, 10, 8`);
log(frequency(arr1, arr2, arr3, arr4, 10, 8));

log(`Pass first parameter as a string of a number if you want a minimum count returned`);
log(`@param: '2', arr3, arr4`);
log(frequency('2', arr3, arr4));

log(`If you want use an object instead an array pairs, use Object.fromEntries(frequency(arr1, arr2))`);
log(Object.fromEntries(frequency(arr1, arr2)));
.as-console-row::after { width: 0; font-size: 0; }
.as-console-row-code { width: 100%; word-break: break-word; }
.as-console-wrapper { min-height: 100% !important; min-width: 100%; }

Другие вопросы по теме