例如,考虑以下带对象的数组。
var collection = [{name:'user1',phone:'203'},
{name:'user2',phone:'5050'},
{name:'user1',phone:'203'}]
现在我想将每个对象相互比较并将结果显示为。
var newCollection = {name:'user1',phone:'203', rowMatch:'true'},
{name:'user2',phone:'5050', rowMatch:'false'},
{name:'user1',phone:'203',rowMatch:'true'}
所以,我想要这样的新集合,当对象属性与第一个和第三个对象匹配时,它会与新属性进行比较和更新。
答案 0 :(得分:1)
var newCollection = collection.map(item => {
item.rowMatch = !!collection.find(i => i !== item && i.phone === item.phone && i.name === item.name);
return item;
});
在这里,您只需使用地图进行迭代,并检查每个项目是否包含与原始文件不同的副本。
答案 1 :(得分:0)
为对象类型创建哈希函数。
在这种情况下,字段的简单连接似乎有效。迭代你的集合和每个元素,哈希,然后把它放在一个表中。
跟踪计数。当计数大于1时,您知道您有重复(行匹配)
答案 2 :(得分:0)
使用Array.prototype.find
var newCollection = collection.map((row, index) => {
if(row["rowMatch"])
return row;
rowMatch = !!collection.find((r,i) => i !== index && r.name === row.name && r.phone === row.phone);
row["rowMatch"] = rowMatch;
return row;
})
答案 3 :(得分:0)
你可以像这样使用newCollection或在集合中操作
collection.forEach((item)=>{
item.rowMatch = (collection.filter((e)=>{return (e.name==item.name&&e.phone==item.phone)}).length>1)?'true':'false';
})
console.log(collection)
简单就是这个。这里正在为JSFiddle工作https://jsfiddle.net/touqeer/pgdsw9Le/1/。