js实现数组去重、比较两数组得出重复部分

数组去重的两种方法:

1、用新对象来存储,对象的key值为数组元素

var removeDup = function (old) {
    var arr = [1, 2, 3, 4, 3, 4, 5];
    var o = {};
    for (var i = 0; i < arr.length; i++) {
        var k = arr[i];
        if (!o[k]) {
            o[k] = 1;
        }
    }
    return Object.keys(o);  //获取o对象的key值数组
};
var oldArr = [1, 2, 3, 4, 3, 4, 5], oldArr1 = [1, 2, 3, 4, 3, 4, 5,'5'];
var newArr = removeDup(oldArr), newArr1 = removeDup(oldArr1);
console.log(newArr);  //[ '1', '2', '3', '4', '5' ]
console.log(newArr1); //[ '1', '2', '3', '4', '5' ], 无法区分数字5和字符串'5'

但是这种方法不管原数组元素里面是数字还是字符串,变成对象的key值时都会强制转换成字符串格式,且数组元素里面不能包含对象,否则识别不了。所以这种方式是有局限性的,适用于纯数字或者纯字符串的数组

2、遍历原数组,用新数组来存储元素,用indexOf判断,如果新数组中不存在原数组中的某个元素,则将其存储到新数组中

var removeDup = function (old) {
    var ret = [];
    for (var i = 0; i < old.length; i++) {
        if (ret.indexOf(old[i]) == -1) {
            ret.push(old[i]);
        }
    }
    return ret;
};
var oldArr = [1, "a", {b: 2}, {c: 3}, {b: 2}, "1", "a"];
var newArr = removeDup(oldArr);
console.log(newArr); //[ 1, 'a', { b: 2 }, { c: 3 }, { b: 2 }, '1' ]


比较两数组得出重复部分:

也是通过查询对象的键值,用一个临时对象存储数组1,将其中的元素作为对象的键,再查询对象o中是否存在键为数组2中元素的对象元素,存在的话,用一个新数组存放查询出来的数组2的元素

var array1 = ['a', 'b', 'c', 'd', 'e'];//数组1
var array2 = ['a', 'f', 'g', 'b', 'c'];//数组2


var o = [];//临时对象o
var tempArray = [];//临时数组

for (var i = 0; i < array1.length; i++) {
    o[array1[i]] = true;//将数array1 中的元素值作为对象o中的键,值为true;
}

for (var i = 0; i < array2.length; i++) {
    if (o[array2[i]]) {
        tempArray.push(array2[i]);//过滤array1 中与array2 相同的元素;
    }
}
console.log(o);  //[ a: true, b: true, c: true, d: true, e: true ]
console.log(tempArray); //[ 'a', 'b', 'c' ], 即为两数组重复部分元素


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值