• Как оптимизировать цикл for трёхуровневой вложенностью?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если в лоб:
    const arr1 = [
      [ 432432, 23423, 123123, 54364346],
      [ 756456, 2423423, 645654, 23423423],
      [ 12354, 123123, 23423423, 1235765]
    ]
    
    const arr3 = [ 12354, 5345, 53456346 ]
    
    const arrResult = arr1
      .flat(Infinity)
      .filter(el => arr3.includes(el))
    
    console.log(arrResult)
    
    // Array [ 12354 ]

    Если оптимизировать по времени, за счёт памяти:
    const arr1 = [
      [ 432432, 23423, 123123, 54364346],
      [ 756456, 2423423, 645654, 23423423],
      [ 12354, 123123, 23423423, 1235765]
    ]
    
    const arr3 = [ 12354, 5345, 53456346 ]
    
    const arr1s = arr1.flat(Infinity)
    arr1s.sort((a, b) => a - b)
    
    const arr3s = arr3.slice()
    arr3s.sort((a, b) => a - b)
    
    const arrResult = []
    
    for (let i = 0, let j = 0; i < arr1s.length, j < arr3s.length;) {
      if (arr1s[i] === arr3s[j]) {
        arrResult.push(arr1s[i])
        i += 1
      } else if (arr1s[i] < arr3s[j]) {
        i += 1
      } else {
        j += 1
      }
    }
    
    console.log(arrResult)
    
    // Array [ 12354 ]

    Правда, в обоих случаях надо смотреть поведение при наличии дублей в каждом из массивов.
    Ответ написан
    Комментировать