var records = [
{
"defaultContact":true,
"contactName":"testContactName",
"mobileNumber":"900000000000",
"mobileDialCode":"+91 IN",
"faxNumber":"123",
"faxDialCode":"+91 IN",
"emailId":"[email protected]"
},
{
"defaultContact":false,
"contactName":"xyz",
"mobileNumber":"900000001000",
"mobileDialCode":"+91 IN",
"faxNumber":"123",
"faxDialCode":"+91 IN",
"emailId":"[email protected]"
},
{
"defaultContact":false,
"contactName":"asdasd",
"mobileNumber":"123",
"mobileDialCode":"+91 IN",
"faxNumber":"",
"faxDialCode":"",
"emailId":""
},
{
"contactName":"asdasd",
"defaultContact":false,
"emailId":"",
"faxDialCode":"",
"faxNumber":"",
"mobileDialCode":"+91 IN",
"mobileNumber":"123"
}
];
上面是一个对象数组,我已经使用两个for循环完成了此操作,但这看起来并不好,有人可以建议如何使用ES6高阶函数来完成此操作。
这里重复表示每个属性与每个属性完全匹配时。
以下是我的操作方法:
let duplicateRecords = [];
for (let i = 0; i < records.length; i++) {
for (let j = i + 1; j < records.length; j++) {
if (
records[i].contactName === records[j].contactName &&
records[i].emailId === records[j].emailId &&
records[i].faxDialCode === records[j].faxDialCode &&
records[i].faxNumber === records[j].faxNumber &&
records[i].mobileDialCode === records[j].mobileDialCode &&
records[i].mobileNumber === records[j].mobileNumber
) {
duplicateRecords = [records[j]];
}
}
}
任何帮助,将不胜感激。
在您的情况下,使用循环for
比使用高阶函数更合适。但是您可以使用Object.keys
和Array.filter
使您的代码更加通用和简短。
for (let i = 0; i < records.length; i++) {
const keys = Object.keys(records[i]);
for (let j = i + 1; j < records.length; j++) {
const isDublicated = !Boolean(keys.filter(key => records[i][key] !== records[j][key]).length);
isDublicated ? dublicatedRecords.push(records[j]) : null;
}
}
或使用高阶函数:
const dublicatedRecords = records.reduce((acc, record, index) => {
const keys = Object.keys(record);
records.forEach((otherRecord, otherIndex) => {
const isDublicated = !Boolean(keys.filter(key => record[key] !== otherRecord[key]).length);
isDublicated && index !== otherIndex ? acc.push(otherRecord) : null;
})
return acc;
}, []);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句