[英]merge multiples array with javascript
我需要發送多個數組作為參數,不僅僅是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,但多個數組作為參數。
你可以使用arguments
。 變量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
}
}
Soktinpk的答案最適合ES5。
如果您能夠使用ES6,則可以使用rest參數使其更加明確
function merge(...arrays) {
return _.uniq(Array.prototype.concat.apply([], arrays));
}
與原始代碼一樣檢查數組類型的版本:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.