簡體   English   中英

如何在JavaScript中使用Array.concat使此“排序聯合”功能起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM