-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
  • 31,610
  • 8
  • 53
  • 74
Andrew
  • 129
  • 4
  • 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
  • 351,820
  • 24
  • 303
  • 358
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,059
  • 6
  • 15