最近接触一个基于vue的h5购票项目,涉及到用户购买多张票时,如果有重复的购票信息需要提示用户“有重复”
由于购票信息是一个对象数组,而且之前也从来没接触过这个问题,所以刚开始还是有一点晕的
通过“面向搜索引擎”编程 ,在各位大佬的提示下,以及查阅了js的函数文档
问题迎刃而解,写了三种解决方案,代码如下,希望对你们有帮助
ITBEN() {
var userInfo = [{
Name: '1',
PaxType: 'adult',
CertNo: '12345678910',
Sex: 'male',
},
{
Name: '2',
PaxType: 'adult',
CertNo: '12345678910',
Sex: 'male',
}
];
// Map
// Map 有一个天然的特性:不会存在重复的元素
const map = new Map(userInfo.map(i => [i.CertNo, i.CertNo]));
if (userInfo.length != map.size) {
console.log('有重复');
}
// 打印出过滤后为结果
console.log(map);
// array.find
// 记录合法的结果
const cache = [];
for (const t of userInfo) {
if (cache.find(c => c.CertNo === t.CertNo)) {
console.log('有重复', t);
continue;
}
cache.push(t);
}
console.log(cache);
// array.filter
// 记录合法的结果
const dict = {};
var s = userInfo.filter(t => {
const key = t.CertNo;
// 检查如果字典中已经存在,那这个数据就过滤掉,不需要了
if (dict[key]) {
console.log('有重复', key);
return false;
}
// 如果字典不存在,加入字典,同时把数据保留下来(返回 true)
dict[key] = true;
return true;
});
console.log(dict);
}
运行结果