如何优雅的将多个数组合并成一个数组(去重)

本篇文章将纳入到常见JS算法中,笔者近期看到一篇关于常见JS算法原文地址(https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates)。

思考如何写一个方法将传递过来的多个未知个数的数组合并成一个数组并去除数组中的重复项?

这里会用到ES5的concat()方法和apply()方法,基础的for循环方法这里不进行阐述。

concat(arr1,arr2)方法接受多个数组元素,并将arr2中的元素拷贝到arr1

var arr1 = ['a', 'b', 'c'];
var arr2 = ['d', 'e', 'f'];

var arr3 = arr1.concat(arr2);

// arr3 is a new array [ "a", "b", "c", "d", "e", "f" ]

apply()方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数。

export function concatArray(){
    let newArr = Array.prototype.concat.apply([], arguments)//没有去重复的新数组
    return Array.from(new Set(newArr))
}

const a1 = concatArray([12],[1,2,3]);
console.log('new arr',a1)
//[1,2,3]

const a2 = concatArray([1],[1,2,3],[4,3,6],[2,5,7]);
console.log('new arr',a2)
//[1,2,3,4,6,5,7]

这个方法是参考他人的思想转化过来的,其中Set()和Array.from()是ES6的方法,详情请读者自行搜索ES6手册。

附:ES6的…操作符是否可以用来更加简便的完成这个玩法,还在思考中,假如有读者知道的话,欢迎留言分享。

猜你喜欢

转载自blog.csdn.net/xjl271314/article/details/78850434
今日推荐