Javascript 如何按重复值拆分数组?
我有一个对象数组,我必须在Javascript 如何按重复值拆分数组?,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组,我必须在索引属性上按重复值拆分它。对于下一个示例对象数组: [ {index: 0, value: 3}, {index: 0, value: 3}, {index: 0, value: 3}, {index: 1, value: 3}, {index: 1, value: 3}, {index: 2, value: 3}, {index: 2, value: 3} ] 预期结果应该是: { 0: [ {index: 0, value:
索引
属性上按重复值拆分它。对于下一个示例对象数组:
[
{index: 0, value: 3},
{index: 0, value: 3},
{index: 0, value: 3},
{index: 1, value: 3},
{index: 1, value: 3},
{index: 2, value: 3},
{index: 2, value: 3}
]
预期结果应该是:
{
0: [
{index: 0, value: 3},
{index: 0, value: 3},
{index: 0, value: 3}
],
1: [
{index: 1, value: 3},
{index: 1, value: 3}
],
2: [
{index: 2, value: 3},
{index: 2, value: 3}
]
}
执行一个简单的
reduce
操作:
const数据=[{
索引:0,
价值:3
},
{
索引:0,
价值:3
},
{
索引:0,
价值:3
},
{
索引:1,
价值:3
},
{
索引:1,
价值:3
},
{
索引:2,
价值:3
}, {
索引:2,
价值:3
}
];
修改常数=数据减少((val,acc)=>{
if(附件[val.index]){
acc[val.index]。推送(val);
}否则{
附件[val.index]=[{
索引:[val.index],
值:[val.value]
}];
}
返回acc;
}, {});
控制台日志(修改)代码>执行一个简单的reduce
操作:
const数据=[{
索引:0,
价值:3
},
{
索引:0,
价值:3
},
{
索引:0,
价值:3
},
{
索引:1,
价值:3
},
{
索引:1,
价值:3
},
{
索引:2,
价值:3
}, {
索引:2,
价值:3
}
];
修改常数=数据减少((val,acc)=>{
if(附件[val.index]){
acc[val.index]。推送(val);
}否则{
附件[val.index]=[{
索引:[val.index],
值:[val.value]
}];
}
返回acc;
}, {});
控制台日志(修改)代码>这里有一个使用和的解决方案:
const输入=[
{索引:0,值:3},
{索引:0,值:3},
{索引:0,值:3},
{索引:1,值:3},
{索引:1,值:3},
{索引:2,值:3},
{索引:2,值:3},
{索引:0,值:3}
];
让obj=输入。减少((分辨率,电流)=>
{
if(资源[当前索引])
res[curr.index].push(curr);
其他的
赋值(res,{[curr.index]:[curr]});
返回res;
}, {});
控制台日志(obj)代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}
这里有一个使用和的解决方案:
const输入=[
{索引:0,值:3},
{索引:0,值:3},
{索引:0,值:3},
{索引:1,值:3},
{索引:1,值:3},
{索引:2,值:3},
{索引:2,值:3},
{索引:0,值:3}
];
让obj=输入。减少((分辨率,电流)=>
{
if(资源[当前索引])
res[curr.index].push(curr);
其他的
赋值(res,{[curr.index]:[curr]});
返回res;
}, {});
控制台日志(obj)代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装器{max height:100%!important;top:0;}
您可以对
循环使用简单的
const输入=[
{索引:0,值:3},
{索引:0,值:3},
{索引:0,值:3},
{索引:1,值:3},
{索引:1,值:3},
{索引:2,值:3},
{索引:2,值:3}
];
常量newArray={}
用于(输入的var i){
if(newArray[i.index]){
newArray[i.index].push(i)
}否则{
新数组[i.index]=[i]
}
}
console.log(newArray)
您可以对循环使用简单的
const输入=[
{索引:0,值:3},
{索引:0,值:3},
{索引:0,值:3},
{索引:1,值:3},
{索引:1,值:3},
{索引:2,值:3},
{索引:2,值:3}
];
常量newArray={}
用于(输入的var i){
if(newArray[i.index]){
newArray[i.index].push(i)
}否则{
新数组[i.index]=[i]
}
}
console.log(newArray)
您可以使用一个简单的
const input=[{index:0,value:3},{index:0,value:3},{index:0,value:3},{index:1,value:3},{index:1,value:3},{index:2,value:3},{index:2,value:3},{index:2,value:3}]
/*如果累加器对象中存在索引,则使用该索引。
否则,创建索引并指向空数组
将上下文中的项推送到数组中
*/
常量输出=输入。减少((acc,v)=>{
acc[v.index]=acc[v.index]| | |[];
acc[v.index].推送(v);
返回acc;
}, {});
console.log(输出)
您可以使用一个简单的
const input=[{index:0,value:3},{index:0,value:3},{index:0,value:3},{index:1,value:3},{index:1,value:3},{index:2,value:3},{index:2,value:3},{index:2,value:3}]
/*如果累加器对象中存在索引,则使用该索引。
否则,创建索引并指向空数组
将上下文中的项推送到数组中
*/
常量输出=输入。减少((acc,v)=>{
acc[v.index]=acc[v.index]| | |[];
acc[v.index].推送(v);
返回acc;
}, {});
console.log(output)
我只得到答案的最后一部分我只得到答案的最后一部分您声称需要根据重复的值进行拆分,但看起来您是根据重复的索引进行拆分。另外,为什么还要麻烦使用具有从0到n的递增数字键的对象呢?数组似乎更适合此任务。请澄清您的意图,并公布您迄今为止的尝试。您声称需要根据重复的值进行拆分,但看起来您是在根据重复的索引进行拆分。另外,为什么还要麻烦使用具有从0到n的递增数字键的对象呢?数组似乎更适合此任务。请澄清您的意图,并公布您迄今为止的尝试。