whats the frequency of the letter ) in:
q: помогите, пожалуйста, разобраться с функцией js массивы(в цикле for использовались методы includes и push.) помогите пожалуйста (только начал изучать js), мне нужно написать функцию, которая получает два массива произвольной длины в параметры array1 и array2, и возвращает новый массив, состоящий из тех элементов, которые присутствуют в обоих исходных массивах. в цикле for использовались методы includes и push.


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

function getelements(array1, array2) {
  for (let i = 0; i < array1.length; i++) { //проходимся по первому массиву
    let newarray = [];
    for (let j = 0; j < array2.length; j++) { // по второму
      const arr1 = array1[i];
      const arr2 = array2[j];
      if (arr1 === arr2) { //if (array1[i].includes(array2[j]))  //проверяем на совпадение через includes (но у меня не работает)
        newarray = array1.push(array2); //возвращаю новый массив, состоящий из тех элементов, которые присутствуют в обоих исходных массивах. (не работает)
      }
    }
    return newarray;
  }
 


что делаю не так - вообще не понимаю((((

a: оставлю этот ответ как ненавистник array.includes внутри цикла:


const nums1 = [1, 2, 5, 3];
const nums2 = [1, 2, 7, 3, 8];

const findintersection = (array1, array2) => {
  const array1set = new set(array1);
  const intersection = [];
  
  for (const num of array2) {
    if (array1set.has(num)) {
      intersection.push(num);
    }
  }
  
  return intersection;
}

console.log(findintersection(nums1, nums2));


так сложность алгоритма снижается с o(n * m) до o(n + m), где n и m - это длины массивов соответсвнно

a: метод push возвращает количество элементов в массиве, после добавления.
таким образом в строке
newarray = array1.push(array2);

переменной newarray присваивается число.
вместо этого, нужно было добавлять найденный элемент в сам массив newarray
newarray.push(arr1)

а также необходимо вынести объявление newarray из первого цикла, точно также как и return.

для случая с includes: внутренний цикл вообще не нужен.
нужен только if, в котором значение элемента будет проверяться во втором массиве
if (array2.includes(array1[i])) {
    // добавляем элемент в newarray
}


a: исправленный вариант:
const intersection = (array1, array2) => {
  let result = [];
  for (let i = 0; i < array1.length; i++) {
    if (array2.includes(array1[i])) {
      result.push(array1[i]);
    }
  }
  return result;
}

более короткое и удобное решение:
const intersection = array1.filter(x => array2.includes(x));


user
There are thirty-two ")"s in the text you provided.
assistant