使用javascript合并多个数组

时间:2014-12-23 20:40:31

标签: javascript underscore.js

我需要发送多个数组作为参数,而不仅仅是2(是的我使用_underscore来检查重复的条目)

function arrayMerge(arr1, arr2) {
    arr1 = Object.prototype.toString.call(arr1) === '[object Array]' ? arr1 : [];
    arr2 = Object.prototype.toString.call(arr2) === '[object Array]' ? arr2 : [];   
    return _.uniq(arr1.concat(arr2));
}

我怎样才能做到这一点?我想发送不是2,而是将数组乘以参数。

3 个答案:

答案 0 :(得分:1)

您可以使用arguments。变量arguments是传递给函数的所有参数的数组。所以你可以试试这个:

function merge() {
  return _.uniq(Array.prototype.concat.apply([], arguments));
}

我没有使用下划线的经验,但这应该有用。

由于concat的行为,调用merge([3, 4, 5], null, 6)将导致[3, 4, 5, null, 6]

确保所有数组都是:

for (var i = 0; i < arguments.length; ++i) {
  if (Object.prototype.toString.call(arguments[i]) !== '[object Array]') {
    throw new Error(arguments[i] + " is not an array"); // Or do whatever you want
  }
}

答案 1 :(得分:1)

Soktinpk的答案最适合ES5。

如果您能够使用ES6,则可以使用rest参数

使其更加明确
function merge(...arrays) {
  return _.uniq(Array.prototype.concat.apply([], arrays));
}

答案 2 :(得分:1)

同样检查数组类型的版本,如原始代码:

function arrayMerge() {
    return _.chain(arguments).filter(_.isArray).flatten().unique().value();
}

演示如下。

function arrayMerge() {
    return _.chain(arguments).filter(_.isArray).flatten().unique().value();
}

var result = arrayMerge([1,2,3],[1,3,4],'test',[2,3,4,5]);

document.write(JSON.stringify(result));
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>