-3

How can I rewrite this nested loop in ES6 and have it in one line ?

const fruits = [ { id: 1, name: "orange"},{ id: 3, name: "apple"},{ id: 4, name: "grape"}]
const selectedFruits = [ "2", "3" ]
  
let fruitsArr= [];

fruits.forEach(fruit => {
  selectedFruits.forEach(selected => {
    if (selected == fruit.id) {
      fruitsArr.push(fruit.name)
    }
  })
})

console.log(fruitsArr)
  
adiga
  • 34,372
  • 9
  • 61
  • 83
Andrew
  • 149
  • 1
  • 5
  • 12

2 Answers2

0

You could filter the array and check with includes by changing selectedFruits to an array of number.

const
    fruits = [{ id: 1, name: "orange" }, { id: 3, name: "apple" }, { id: 4, name: "grape" }],
    selectedFruits = [2, 3],
    fruitsArr = fruits.filter(({ id }) => selectedFruits.includes(id));

console.log(fruitsArr);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

With reduce:

const fruits = [ { id: 1, name: "orange"},{ id: 3, name: "apple"},{ id: 4, name: "grape"}]
const selectedFruits = [ "2", "3" ]
const fruitsArr = fruits.reduce((p, c) => (selectedFruits.includes(String(c.id)) && p.push(c), p), [])
console.log(fruitsArr)
Ziv Ben-Or
  • 1,149
  • 6
  • 15