Получить результат двух массивов одним циклом

Рейтинг: 0Ответов: 3Опубликовано: 13.04.2023
const productItem = [1, 2, 3, 4, 5];

const newArr = [1, 4];

Мне нужно получить true, false, false, true, false одним циклом, т.е. не

productItem.forEach(i => {
    newArr.forEach(n => {})
)

Ответы

▲ 2

Мне нужно получить true, false, false, true, false одним циклом

Можно сделать таким образом...

const productItem = [1, 2, 3, 4, 5];
const newArr = [1, 4];

const a = productItem.map(v => newArr.includes(v))
console.log(a)

▲ 1

const productItem = [1, 2, 3, 4, 5];
const newArr = [1, 4];

console.log(productItem.map(el => newArr.indexOf(el) >= 0))

▲ -1

Как-то вот так:

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

const newArr = [1, 4];

const resultArr = convertToBools(productItem, newArr)

console.log(resultArr)

function convertToBools(firstArr, secondArr) { // Объявляем функцию в конце потому, что так улучшается читаемость.
  const result = []
  const numbersSet = new Set(secondArr)

  for (let i = 0; i < firstArr.length; i++) {
    const currentNum = firstArr[i] // Не используем i, т.к. число в массиве может быть отлично от i 
    const bool = numbersSet.has(currentNum) // https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Set/has

    result.push(bool)
  }

  return result
}