Подсчет отдельных слов из массива в другом массиве - PullRequest
2 голосов
/ 05 ноября 2019

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

Я пробовал приведенный ниже код, но вывод равен 0. Я не понимаю, почему он регистрируетme значение, которое я присвоил переменной в начале функции и не запускает цикл for.

let A = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let B = ['really', 'very'];

let number = () => {
  let count = 0;
  for (let i=0; i < A.lengths; i++) {
    if (B.includes(A[i])) {
      return count++;
    }
  }
   return console.log(count);
 }

number();

Я ожидаю, что результат будет 3.

Ответы [ 6 ]

2 голосов
/ 05 ноября 2019

Один вкладыш => A.filter(item => B.includes(item)).length;

2 голосов
/ 05 ноября 2019

Вам нужно

  • length как свойство для размера массива
  • продолжить цикл и не возвращать рано
  • может вернуть счет, возвращая результат console.log, вы получите undefined.

Хорошая идея,

  • - взять два массива в качестве параметра для функции,
  • принять const объявление / инициализацию, поскольку эта переменная является константой,
  • - использовать маленькую начальную букву для переменных.

const number = (a, b) => {
        let count = 0;
        for (let i = 0; i < a.length; i++) {
            if (b.includes(a[i])) {
                count++;
            }
        }
        return count;
   };

let array1 = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let array2 = ['really', 'very'];


console.log(number(array1, array2));
0 голосов
/ 05 ноября 2019

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

let A = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let B = ['really', 'very'];

let total = B.reduce(function(accumulator, currentValue){

    let founds = A.filter(function(value,index){
        return value == currentValue;
    }).length;

    return accumulator + founds;

},0);


console.log(total);
0 голосов
/ 05 ноября 2019

1- длина -> не длина

2- включает в себя только проверяет, существует ли это значение в этом массиве, поэтому возвращает true или false

3- оператор return завершает выполнение функции

Итак, как я понял, вы рассчитываете появление элементов B в A

Это способ сделать это:

let A = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let B = ['really', 'very'];

let number = () => {
  let count = 0;
  for (let i=0; i < B.length; i++) {
    for (let j=0; j < A.length; j++){
      if (B[i] === A[j]) count++;
    }
    console.log(count);
    count = 0;
  }
   
 }

number();
0 голосов
/ 05 ноября 2019

зачем вам это: return count++;?

return предназначено для выхода из функции со значением, которое ей дано. Когда вы пишете return count++;, он возвращает счетчик и только затем увеличивает его (на самом деле он ничего не увеличивает, потому что вы уже находитесь вне области действия функции на данный момент).

return console.log(count) такженичего не делает - кроме кода, который никогда не попадет туда, если в B не найдены слова, это вернет возвращаемое значение из console.log, которое не определено.

делает это:

let number = () => {
  let count = 0;
  for (let i=0; i < A.length; i++) {
    if (B.includes(A[i])) {
      count++;
    }
  }
   console.log(count);
   return count;
 }
0 голосов
/ 05 ноября 2019

Вы можете добавить еще один оператор for для итерации по элементам в B, а затем проверить, равно ли A at [i] B в [j]. Вероятно, не так эффективно, как другие ответы, хотя.

 let A = ['really', 'basically', 'After', 'a', 'quick', 'popular', 'really', 'Red', 'began', 'very'];
 let B = ['really', 'very'];

    let number = () => {
        let count = 0;
        for (let i = 0; i < A.length; i++) {
            for(let j=0; j < B.length; j++){
                if (A[i] == B[j]){
                    count++
                }
            }
        }
        return console.log(count);
    }

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