Вы можете использовать Array.prototype.flatMap
-
const process = (t = []) =>
t.flatMap
( v =>
Object(v) === v
? Object
.entries(v)
.flatMap(([ s, n ]) => Array(n).fill(s))
: [ null ]
)
const data =
['h', 'e', {apple: 2}, 'l', 'p']
const result =
process(data)
console.log(JSON.stringify(result))
// [null,null,"apple","apple",null,null]
Если объект имеет несколько ключей, каждый элемент будет развернут -
const result =
process(['h', 'e', {apple: 2, pear: 3}, 'l', 'p', {berry: 1}])
console.log(JSON.stringify(result))
// [null,null,"apple","apple","pear","pear","pear",null,null,"berry"]
Array.prototype.flatMap
- это просто специализированная версия Array.prototype.reduce
-
Array.prototype.flatMap = function (f, context)
{ return this.reduce
( (r, x) => r.concat(f.call(context, x))
, []
)
}