![](/img/trans.png)
[英]How can I reduce or flatten an array of arrays using the Array.concat() method inside the callback function for Array.reduce()
[英]How do I get this 'Sorted Union' function to work using Array.concat, in javaScript
我正在針對FCC進行此練習,該練習需要滿足以下條件:
編寫一個函數,該函數接受兩個或多個數組,並按原始提供的數組的順序返回一個唯一值的新數組。
換句話說,所有數組中出現的所有值都應按其原始順序包括在內,但最終數組中不得重復。
唯一數字應按其原始順序排序,但最終數組不應按數字順序排序。
這是我的代碼:
function uniteUnique(){
var elm, exists = {},
outArr = [],
arr = [],
args = Array.prototype.slice.call(arguments);
args.forEach(function(arg) {
arr.concat(arg.filter(Boolean));
});
for(var i =0; i<arr.length; i++){
elm = arr[i];
if(!exists[elm]){
outArr.push(elm);
exists[elm] = true;
}
}
return arr;
}
我的問題圍繞這條線。
args.forEach(function(arg) {
arr.concat(arg.filter(Boolean));
});
我希望所有的參數/數組都通過filter
方法,然后串聯起來,任何幫助將不勝感激!
布爾值不會過濾唯一項,它只會返回不是預期值的Boolean(arg)
。
更換
args.forEach(function(arg) {
arr.concat(arg.filter(Boolean));
});
同
args.forEach(function(arg) {
arr.concat(arg.filter(function(val){
return arr.indexOf(val) == -1;
}));
});
這只會連接唯一的數組項
好吧,您可能更喜歡以下單襯板功能方法;
var getUniques = (...a) => a.reduce((p,c)=> p.concat(c)).reduce((p,c) => {!~p.indexOf(c) && p.push(c); return p},[]); document.write("<pre>" + getUniques([1,2,3],[3,4,5],[3,4,5,6,7,8],[0,1,2,3,4,5,6,7,8,9]) + "</pre>");
getUniques
函數按出現順序返回所有唯一性的數組。 請注意,箭頭功能中沒有自變量對象,但是ES6的...rest
參數也可以正常工作。 即使您不喜歡功能方法,其背后的邏輯也可能會影響您實現與常規功能和for循環相同的功能。
上面的一個更簡化的版本如下
var getUniques = (...a) => a.reduce((p,c) => {c.forEach(e => !~p.indexOf(e) && p.push(e)); return p}); document.write("<pre>" + getUniques([1,2,3],[3,4,5],[3,4,5,6,7,8],[0,1,2,3,4,5,6,7,8,9]) + "</pre>");
function union(arrays) {
const u = arrays.reduce(function(acc, iVal) {
return acc.concat(iVal);
})
return [...new Set(u)];
}
var arr1 = [5, 10, 15];
var arr2 = [15, 88, 1, 5, 7];
var arr3 = [100, 15, 10, 1, 5];
console.log(union([arr1, arr2, arr3])); // should log: [5, 10, 15, 88, 1, 7, 100]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.