У меня есть такой объект:
{ green: 2, blue: 1, red: 2}
Как мне превратить его в массив, который выглядит следующим образом:
[ 'green', 'green', 'blue', 'red', 'red']
Можно сделать так:
Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k));
Пример:
const obj = { green: 2, blue: 1, red: 2}; const res = Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k)); console.log(res);
Использование карты и квартиры, если вы не хотите использовать flatMap напрямую
const obj = { green: 2, blue: 1, red: 2 }; const responseArray = Object.entries(obj) .map(([key,value]) => { return Array(value).fill(key) }).flat(); console.log(responseArray); // ["green", "green", "blue", "red", "red"]
В случае, если вы не хотите иметь дело с полифиллами для поддержки flatMap в IE и т. Д., Вы также можете рассмотреть это решение, которое основано только на Object.keys и Array.forEach
let obj = {green: 2, blue: 1, red: 2}, arr=[] Object.keys(obj).forEach(x => arr.push(...Array(obj[x]).fill(x))) console.log(arr)
Другой способ избежать деструктуризации массива ES6 - использовать Array.reduce и Object.entries :
let obj = {green: 2, blue: 1, red: 2} let r = Object.entries(obj).reduce((r,[k,v]) => r.concat(Array(v).fill(k)),[]) console.log(r)
var data={ green: 2, blue: 1, red: 2}; var newData=[]; for(let i in data){ for(let j=0;j<data[i];j++){ newData.push(i); } } console.log('newData = ', newData);
выход
newData = ["green", "green", "blue", "red", "red"]
1005 *
Object.entries сделает это - он дает пару ключ: значение каждого свойства в объекте.Затем вы используете значение, чтобы вставить ключ в массив, который дает желаемый результат.
var obj = { green: 2, blue: 1, red: 2}; var newArr = []; var objEntries = Object.entries(obj); objEntries.forEach(function(item){ for(var i = 0; i < item[1]; i++){ newArr.push(item[0]) }; }) console.log(newArr); // gives //[ 'green', 'green', 'blue', 'red', 'red']
Используйте reduce с Object.entries:
reduce
Object.entries
const obj = { green: 2, blue: 1, red: 2}; const res = Object.entries(obj).reduce((a, [k, v]) => (a.push(...new Array(v).fill(k)), a), []); console.log(res);