題目
創(chuàng)建一個函數(shù)慨绳,接受兩個或多個數(shù)組,返回所給數(shù)組的對等差分(symmetric difference)(△or⊕)數(shù)組.給出兩個集合 (如集合A = {1, 2, 3}和集合B = {2, 3, 4}), 而數(shù)學(xué)術(shù)語 "對等差分" 的集合就是指由所有只在兩個集合其中之一的元素組成的集合(A △ B = C = {1, 4}). 對于傳入的額外集合 (如D = {2, 3}), 你應(yīng)該安裝前面原則求前兩個集合的結(jié)果與新集合的對等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).
當(dāng)你遇到困難的時候,記得查看錯誤提示害碾、閱讀文檔汪榔、搜索、提問品擎。
這是一些對你有幫助的資源:
Array.reduce()
Symmetric Difference
思路
- 天殺的.....我能放棄么埋合,怎么又是數(shù)學(xué)題;
- 對等差分萄传,都是啥......百度之甚颂,很悲慘蜜猾,沒搜到;而且很不幸的是振诬,題目提示的Symmetric Difference的解釋頁面網(wǎng)址指向是油土鱉蹭睡,我等不翻墻是打不開的,我也懶得翻墻赶么;
image.png
- 再仔細(xì)閱讀題目的舉例:
指由所有只在兩個集合其中之一的元素組成的集合(A △ B = C = {1, 4}).
對于傳入的額外集合 (如D = {2, 3}), 你應(yīng)該安裝前面原則求前兩個集合的結(jié)果與新集合的對等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).
- 所以意思就是 將集合A 肩豁、B中互相沒出現(xiàn)的組成新的集合C,然后用C來和D比較辫呻,將C清钥、D中互相沒出現(xiàn)的又組成新的集合;
5.很顯然放闺,最終只會得到唯一的一個結(jié)果祟昭,那會用到 reduce(),題目也有提示使用該方法怖侦;
解答
function sym(args) {
var arr = args.slice.call(arguments); //轉(zhuǎn)化為單個數(shù)組篡悟;
var C =arr.reduce(function(prev,cur,index,array){
return prev.filter(function(item){
return cur.indexOf(item)==-1; //返回A集合中不存在于B集合的
}).concat( //拼接起來
cur.filter(function(item){
return prev.indexOf(item) < 0; //返回B集合中不存在于A集合的
})
);
});
return C.filter(function(item,index,array){
return array.indexOf(item) == index; //解決數(shù)組內(nèi)部本身也可能存在重復(fù)
});
}
sym([1, 2, 3], [5, 2, 1, 4]);
- 這道題折騰了很久,主要是 filter創(chuàng)建新數(shù)組的用法倒騰了好久匾寝,忘記了搬葬;
- 再一個就是indexOf 來驗(yàn)證數(shù)值在兩個數(shù)組中是否互相存在也是折騰了好久