JS中数组的合并与去重

  • Post author:
  • Post category:其他


一、数组(Array)的合并

1.forEach()遍历其中一个数组,将该数组的每一项push到另一个数组中

//遍历合并
let arr1 = [ 1, 2, 3, 4, 5];
let arr2 = [ 7, 8, 9, 4, 5];

arr1.forEach( item => arr2.push(item) );

2.拓展运算符(ES6的)

//拓展运算符
let arr1 = [ 1, 2, 3, 4, 5];
let arr2 = [ 7, 8, 9, 4, 5];

arr1.push( ...arr2 );

3.concat()一次合并多个数组(原数组不变,返回一个新数组)

//concat()合并多个数组
let arr1 = [ 1, 2, 3, 4, 5];
let arr2 = [ 7, 8, 9, 4, 5];
let arr3 = [ 10, 11, 12, 13, 14];

let arr = arr1.concat(arr2, arr3);

4.使用apply()方法合并数组(apply(obj,array),其默认将array数组转化成一个参数列表)

//apply()合并数组
let arr1 = [ 1, 2, 3, 4, 5];
let arr2 = [ 7, 8, 9, 4, 5];

arr1.push.apply(null, arr2);    //相当于arr1.push(...arr2)

二、数组(Array)的去重

1.利用对象属性的唯一性去重(*个人比较推荐,在面对数组中每一项都是一个对象的时候,一些API是不生效的)

//利用对象属性的唯一性去重
let list = [
    {Staff_Code: "001", Staff_Name: "唐三"},
    {Staff_Code: "001", Staff_Name: "唐三"},
    {Staff_Code: "002", Staff_Name: "小舞"},
    {Staff_Code: "003", Staff_Name: "奥斯卡"}
];

cutarray(arr) {
    let obj = {};    //obj用来记录该项重复出现了几次
    let brr = [];    //brr是去重后的数组
    arr.forEach((item) => {
        if (obj[item.Staff_Code] == undefined) {
        obj[item.Staff_Code] = 1;
        brr.push(item);
        } else {
            obj[item.Staff_Code] += 1;
        }
    });
    return brr;
}

let arr = this.cutarray(list);

2.递归去重(先给数组排序,然后相邻项判断是否相等,相等的用splice()截去。)

//递归去重(数组中存储的是原始(基本)数据类型,而非引用类型对象)

cutarray(arr) {
    let len=arr.length;
    arr.sort((a,b) => a-b);    //a-b升序;b-a降序

    function loop(index){
        if(index >= 1) {
            if(arr[index]===arr[index-1]) { 
                arr.splice(index, 1);
            }
            loop(index-1)
        }
    }

    return arr;
}

3.利用filter()去重

// 如果新数组的当前元素的索引值 == 该元素在原始数组中的第一个索引,则返回当前元素
/**arr.indexOf(item),该方法将从头到尾地检索数组,看它是否含有对应的元素。如果找到一个item,则返回 item的"第一次出现的位置"。**/

 let list = arr.filter((item,index) => arr.indexOf(item) === index );

4.Set去重(ES6中的)

//Set去重
let list = [...new Set(arr)];    // arr需要去重的数组

// 或者
let list1 = Array.form(new Set(arr));



版权声明:本文为zhengjingID原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。