Javascript 如何从由object.values决定元素数量的对象生成数组?

Javascript 如何从由object.values决定元素数量的对象生成数组?,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,我有一个这样的目标: { green: 2, blue: 1, red: 2} 如何将其转换为如下所示的数组: [ 'green', 'green', 'blue', 'red', 'red'] Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k)); 可以这样做: [ 'green', 'green', 'blue', 'red', 'red'] Object.entries(obj).flatMap(([k, v])

我有一个这样的目标:

{ green: 2, blue: 1, red: 2}
如何将其转换为如下所示的数组:

[ 'green', 'green', 'blue', 'red', 'red']
Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k));

可以这样做:

[ 'green', 'green', 'blue', 'red', 'red']
Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k));
例如:

constobj={绿色:2,蓝色:1,红色:2};
const res=Object.entries(obj.flatMap)([k,v])=>Array(v.fill(k));

控制台日志(res)
对象使用
reduce
。条目

constobj={绿色:2,蓝色:1,红色:2};
const res=Object.entries(obj).reduce((a[k,v])=>(a.push(…新数组(v.fill(k)),a),[]);

控制台日志(res)Object.entries将执行此操作-它为对象中的每个属性提供一个key:value对。然后使用该值将键推入一个数组中,该数组将提供所需的输出

var obj={绿色:2,蓝色:1,红色:2};
var newArr=[];
var objEntries=Object.entries(obj);
objEntries.forEach(函数(项){
对于(变量i=0;i<项目[1];i++){
新建推送(项目[0])
};
})
console.log(newArr);//给出//[“绿色”、“绿色”、“蓝色”、“红色”、“红色”]

< P>如果你不想在伊江等地处理波利菲尔,你也可以考虑这个解决方案,它仅基于和:

让obj={green:2,blue:1,red:2},arr=[]
Object.keys(obj.forEach(x=>arr.push(…数组(obj[x]).fill(x)))

console.log(arr)
如果不想直接使用flatMap,请使用map和flat

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"]

这是一种使用发电机的巧妙方法。对于这个例子,可能有点过分了

函数*makeIterator(obj){
常量键=对象键(obj);
for(键的常数键){
常量值=对象[键];
for(设i=0;ilog(Array.from(makeIterator(obj))这就像一个魅力!只是为了我的教育-我想我应该把数组(v)读成:创建两个数组,并用值“green”填充它们//然后得到第一个和第二个元素“green”,依此类推。。。我读对了吗?是的,每种颜色你会得到这样一个重复值的小数组,然后用flatMap组合成一个数组。我投票赞成上面一个稍微简单的解决方案,但你的也很聪明。谢谢