Javascript通过相同的对象键重新排列数组
我所拥有的:Javascript通过相同的对象键重新排列数组,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,我所拥有的: myArray = [ {type: "My Application"}, {type: "My Component"}, {color: ["red"] } ] 我需要的是: withUniqueKeys = [ {type: ["My Application", "My Component"] }, {color: ["red"]} ] 我如何循环遍历myArray以获得类似于WithUniqKey的数组?我玩这个游戏玩得太久了。lodash溶液也可以。您可以使用 让my
myArray = [ {type: "My Application"}, {type: "My Component"}, {color: ["red"] } ]
我需要的是:
withUniqueKeys = [ {type: ["My Application", "My Component"] }, {color: ["red"]} ]
我如何循环遍历myArray以获得类似于WithUniqKey的数组?我玩这个游戏玩得太久了。lodash溶液也可以。您可以使用
让myArray=[{type:My Application},{type:My Component},{color:red}]
设op=myArray.reduceop,inp=>{
let[key,value]=Object.entriesinp[0]
op[键]=op[键]| |[]
op[key].pushvalue
返回操作
},{}
//如果希望只有一个值的属性是对象
设final=Object.entriesop
.map[key,value]=>{[key]:value.length==1?value[0]:value}
console.logfinal您可以使用和
让myArray=[{type:My Application},{type:My Component},{color:red}]
设op=myArray.reduceop,inp=>{
let[key,value]=Object.entriesinp[0]
op[键]=op[键]| |[]
op[key].pushvalue
返回操作
},{}
//如果希望只有一个值的属性是对象
设final=Object.entriesop
.map[key,value]=>{[key]:value.length==1?value[0]:value}
console.logfinal试试这个:
将初始数组减少为按键分组条目
将对象项映射到相应对象的数组
让myArray=[{type:My Application},{type:My Component},{color:[red]}]
myArray=myArray.ReduceAc,el=>{
设prop=Object.keysel[0];
如果!acc[prop]acc[prop]=[el[prop]];
else acc[道具]。普希尔[道具]
返回acc;
},{}
myArray=Object.keysmyArray.mapd=>{[d]:myArray[d]。长度===1?myArray[d][0]:myArray[d]};
console.logmyArray尝试以下操作:
将初始数组减少为按键分组条目
将对象项映射到相应对象的数组
让myArray=[{type:My Application},{type:My Component},{color:[red]}]
myArray=myArray.ReduceAc,el=>{
设prop=Object.keysel[0];
如果!acc[prop]acc[prop]=[el[prop]];
else acc[道具]。普希尔[道具]
返回acc;
},{}
myArray=Object.keysmyArray.mapd=>{[d]:myArray[d]。长度===1?myArray[d][0]:myArray[d]};
console.logmyArray首先,您可以使用按键进行分组。然后,在第二步中,您可以使用生成的来获得所需的结构:
设myArray=[
{类型:我的应用程序,类别:游戏},
{type:My组件,category:other},
{颜色:红色}
];
设res=myArray.reduceac,curr=>
{
Object.keyscurr.forEachk=>
{
acc[k]=acc[k]| |【】concatcurr[k];
};
返回acc;
}, {};
res=Object.entriesres.map[k,v]=>{[k]:v.length>1?v:v[0]};
console.logres;
.as控制台{背景颜色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}首先,您可以使用来按键进行分组。然后,在第二步中,您可以使用生成的来获得所需的结构:
设myArray=[
{类型:我的应用程序,类别:游戏},
{type:My组件,category:other},
{颜色:红色}
];
设res=myArray.reduceac,curr=>
{
Object.keyscurr.forEachk=>
{
acc[k]=acc[k]| |【】concatcurr[k];
};
返回acc;
}, {};
res=Object.entriesres.map[k,v]=>{[k]:v.length>1?v:v[0]};
console.logres;
.as控制台{背景颜色:黑色!重要;颜色:石灰;}
.as console wrapper{max height:100%!important;top:0;}您可以这样做:
const arr=[{type:My Application},{type:My Component},{color:red}];
const result=Object.entriesarr.reduceac,x=>{
Object.entriex.forEach[k,v]=>{
acc[k]=[…acc[k]| |[],v];
};
返回acc;
},{}.map[k,v]=>{[k]:v.length>1?v:v[0]};
console.logresult 您可以这样做:
const arr=[{type:My Application},{type:My Component},{color:red}];
const result=Object.entriesarr.reduceac,x=>{
Object.entriex.forEach[k,v]=>{
acc[k]=[…acc[k]| |[],v];
};
返回acc;
},{}.map[k,v]=>{[k]:v.length>1?v:v[0]};
console.logresult 其他答案看起来不错,这里有一个简短的替代方案,也使用and: constmyarray=[{type:My Application},{type:My Component},{color:red}]; const with uniquekeys=Object.entries myArray.reduceresult,项=>{ 常量[key,val]=Object.entrie项[0]; 结果[键]=结果[键]?[…[结果[键]],val]:val; 返回结果; }, {} .map[key,val]=>{[key]:val};
console.logwithuniquekey 其他答案看起来不错,这里有一个简短的替代方案,也使用and: constmyarray=[{type:My Application},{type:My Component},{color:red}]; const with uniquekeys=Object.entries myArray.reduceresult,项=>{ 常量[key,val]=Object.entrie项[0]; 结果[键]=结果[键]?[…[结果[键]],val]:val; 返回结果; }, {} .map[key,val]=>{[key]:val};
console.logwithuniquekey;是否只有类型和颜色或不同和/或更多属性?是否只有类型和颜色或不同和/或更多属性?如果只有一个值,OP显然不需要数组
e、 g.color.@Jeto也为这种情况更新了,但在我看来,最好有一个一致的strcture。如果只有一个值,例如color,显然,OP不需要数组。@Jeto也为这种情况更新了,但在我看来,最好有一个一致的strcture