如果在数组中发现重复项,则必须通过纯javascript添加带有key的索引
我在数组中有一组项。每个项目中都有多个对象 如果我们发现了基于特定对象的重复项,则必须使用该键对象添加索引 例如:如果在数组中发现重复项,则必须通过纯javascript添加带有key的索引,javascript,arrays,json,Javascript,Arrays,Json,我在数组中有一组项。每个项目中都有多个对象 如果我们发现了基于特定对象的重复项,则必须使用该键对象添加索引 例如: var values = [ { name: 'someName' }, { name: 'someName' }, { name: 'some' }, { name: 'some' }, { name: 'single' } ]; 它将作为 var values = [ { name: 'someName' },
var values = [
{ name: 'someName' },
{ name: 'someName' },
{ name: 'some' },
{ name: 'some' },
{ name: 'single' }
];
它将作为
var values = [
{ name: 'someName' },
{ name: 'someName1' },
{ name: 'some' },
{ name: 'some1' },
{ name: 'single' }
];
如何用纯javascript(无jQuery)编写逻辑
将的
thisArgs
作为保留计数的临时对象的解决方案
var value=[{name:'someName'},{name:'someName'},{name:'some'},{name:'some'},{name:'single'}];
值。forEach(函数(a){
如果(!此[a.name]){
此[a.name]={count:0};
返回;
}
a、 姓名+=++此[a.name].计数;
},Object.create(null));
document.write(“”+JSON.stringify(值,0,4)+“”)代码>问题和示例不是很内联
如果我们发现了基于特定对象的重复项,则必须使用该键对象添加索引
从上面这句话中,我的理解是,如果我们发现了一个副本,应该做以下任何一个。由于还不清楚如果存在多个重复项会发生什么,因此代码将处理所有现有的重复项
1。第一个索引值将添加到重复对象的名称属性值中
var值=[
{name:'someName'},
{name:'someName'},
{name:'some'},
{name:'some'},
{name:'single'},
{name:'someName'},
{name:'some'}
],
redIx=values.reduce((p,c,i)=>{!!p[c.name]?p[c.name].push(i):(p[c.name]=[],p[c.name].push(i))
返回p
},{});控制台日志(redIx)
Object.keys(redIx).forEach(e=>redIx[e].forEach((i,j)=>j>0&&(value[i].name+=redIx[e][0]);
document.write(“”+JSON.stringify(值,0,2)+“”)代码>你尝试过什么吗?我已经添加了JSFIDLE,但无法在帖子中获得logicAdded JSFIDLE