如何比较数组中的每个对象。找到后用新的 属性 更新对象
How to compare each object in an array with each other. When found update the object with a new property
例如考虑以下带有对象的数组。
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'}
所以,我想要这样的新集合,当对象属性与第一个和第三个对象匹配时,它会与新的 属性 进行比较和更新。
为您的对象类型创建哈希函数。
在这种情况下,字段的简单串联似乎可行。遍历您的集合并针对每个元素进行哈希处理,然后将其放入 table.
跟踪计数。当计数大于 1 时,您知道您有重复项(行匹配)
JavaScript Hashmap Equivalent
使用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;
})
var newCollection = collection.map(item => {
item.rowMatch = !!collection.find(i => i !== item && i.phone === item.phone && i.name === item.name);
return item;
});
这里您只是使用 map 来遍历并检查每个项目是否有不是原始的重复项。
您可以像这样使用 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)
简单的是 that.Here 正在为它工作 JSFiddle https://jsfiddle.net/touqeer/pgdsw9Le/1/ .
例如考虑以下带有对象的数组。
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'}
所以,我想要这样的新集合,当对象属性与第一个和第三个对象匹配时,它会与新的 属性 进行比较和更新。
为您的对象类型创建哈希函数。
在这种情况下,字段的简单串联似乎可行。遍历您的集合并针对每个元素进行哈希处理,然后将其放入 table.
跟踪计数。当计数大于 1 时,您知道您有重复项(行匹配)
JavaScript Hashmap Equivalent
使用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;
})
var newCollection = collection.map(item => {
item.rowMatch = !!collection.find(i => i !== item && i.phone === item.phone && i.name === item.name);
return item;
});
这里您只是使用 map 来遍历并检查每个项目是否有不是原始的重复项。
您可以像这样使用 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)
简单的是 that.Here 正在为它工作 JSFiddle https://jsfiddle.net/touqeer/pgdsw9Le/1/ .