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