Optimize a deep and map function in JS

Viewed 79

Given the following Map:

const myMap = new Map([
    [“a”, [{
        files: [{
            name: “f1a”
        }, {
            name: “f2a”
        }]
    }]],
    [“b”, [{
        files: [{
            name: “f1b”
        }, {
            name: “f2b”
        }]
    }]]
]);

I need to have the following result:

[{
    "name": "f1a"
}, {
    "name": "f2a"
}, {
    "name": "f1b"
}, {
    "name": "f2b"
}]

I achieved that using:

[...x.values()].flat().map(x => x.files).flat()

How can the above be optimized, can even use lodash I don't mind.

I tried to use lodash: flattenMapDeep

but didn't work

1 Answers

You can use Array#[flat, flatMap]:

const myMap = new Map([
  ['a', [{
    files: [{
      name: 'f1a'
    }, {
      name: 'f2a'
    }]
  }]],
  ['b', [{
    files: [{
      name: 'f1b'
    }, {
      name: 'f2b'
    }]
  }]]
])

// Your code.. 
const result1 = [...myMap.values()].flat().map(x => x.files).flat()
console.log('Result1', result1)

// Using Array#[flat, flatMap] (((Fastest)))
const result2 = [...myMap.values()].flat().flatMap(x => x.files)
console.log('Result2', result2)

Related