創建一個函數,接受兩個或多個數組,返回所給數組的 對等差分(symmetric difference) (△ or ⊕)數組.


創建一個函數,接受兩個或多個數組,返回所給數組的 對等差分(symmetric difference) ( or )數組.

給出兩個集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而數學術語 "對等差分" 的集合就是指由所有只在兩個集合其中之一的元素組成的集合(A △ B = C = {1, 4}). 對於傳入的額外集合 (如 D = {2, 3}), 你應該安裝前面原則求前兩個集合的結果與新集合的對等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).

先貼我的代碼:

function sym(args) {
  var arr=[];
 for(var i=0;i<arguments.length;i++){
   arr.push(arguments[i]);     //用數組組成新的數組
 }
  arr.forEach(function(i){    //刪去每個數組項重復的部分
    for(var j=0;j<i.length-1;j++){
      for(var k=j+1;k<i.length;k++)
        if(i[j]==i[k]){
          i.splice(j,1);
          j--;               //重新定位J的位置
        }
    }
   
 // console.log(arr);
  });
  // return arr;
 arr.reduce(function(prev,cur,index,array){ //歸並數組,並且刪去后項中相同的項。
   prev.forEach(function(m){
     if(cur.indexOf(m)==-1)
       cur.push(m);
     else cur.splice(cur.indexOf(m),1);
   });
    return cur;
            });
   
    return arr[arr.length-1];
}

sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

其中每個數組查重的方法比較繁瑣,我留意到“

葡萄美酒夜光杯

”的寫法比較好:

  return temp.filter(function(item,index,array){ return array.indexOf(item) == index; });//自身查重只需要讓它本身第一次出現在原數組的位置為索引值index,就可以保留且只保留一個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM