最近接触一个基于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);
}

运行结果

Last modification:March 31st, 2020 at 11:25 am
如果觉得我的文章对你有用,请随意赞赏