我需要发送多个数组作为参数,而不仅仅是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,而是将数组乘以参数。
答案 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>