我正在嘗試創(chuàng)建一個函數(shù),它將獲取在第二個或第三個上無法看到的項目以及在函數(shù)內(nèi)傳遞的即將到來的數(shù)組.
現(xiàn)在我的函數(shù)只獲得類似的項目.我怎樣才能使它得到差異(w / c是第二個和第三個以及前進陣列不存在的項目.
const callM = function(arrays) {
arrays = Array.prototype.slice.call(arguments);
let result = [];
for(let i = 1; i < arrays.length; i ){
for(let x = 0; x < arrays[i].length; x ){
if(arrays[0].includes(arrays[i][x])){
result.push(arrays[i][x]);
}
}
}
return result;
};
console.log(callM([1, 2, 3, 4, 5], [5, 2, 10])); // -> must be [1, 3, 4]
console.log(callM([1, 2, 3, 4, 5], [5, 2, 10], [7, 1, 8])); // -> must be [3,4]
現(xiàn)在的邏輯有點偏,因為它恰恰相反.我該如何解決,?
還有一種方法可以使用高階函數(shù)(如reduce或filter)來完成此操作嗎,?
謝謝! 解決方法: 我會以不同的方式思考這個問題.作為兩組之間的差異:數(shù)組0和數(shù)組1 … n
要獲得數(shù)組0,只需將其從頂部移開即可
const arr0 = arrays.shift()
參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
這將從數(shù)組中刪除第一個數(shù)組 接下來我們合并剩下的數(shù)組
const arrN = arrays.reduce(function(prev, curr) {
return prev.concat(curr)
})
參考:http://www./en/javascript/flattening-multidimensional-arrays-in-javascript/
不需要的,由@Phil提到的包括處理
下一個過濾器通過與自身進行比較從arrN復制
const unique = arrN.filter(function(elem, index, self) {
return index == self.indexOf(elem);
})
參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
下一個過濾器包括找到差異(或聯(lián)合)
const diff = arr0.filter(function(item) {
return !arrN.includes(item))
}
完整片段:
function callM(arrays) {
const arr0 = arrays.shift()
const arrN = arrays.reduce(function(prev, curr) {
return prev.concat(curr)
})
//const unique = arrN.filter(function(elem, index, self) {
// return index == self.indexOf(elem)
//})
return arr0.filter(function(item) {
return !arrN.includes(item)
})
}
console.log(callM([[1, 2, 3, 4, 5], [5, 2, 10]]))
console.log(callM([[1, 2, 3, 4, 5], [5, 2, 10], [7, 1, 8]]))
當然ES6會更容易. ??
const callM = (first, ...rest) => {
const arrays = [].concat(...rest)
return first.filter(item => !arrays.includes(item))
}
console.log(callM([1, 2, 3, 4, 5], [5, 2, 10]))
console.log(callM([1, 2, 3, 4, 5], [5, 2, 10], [7, 1, 8]))
來源:https://www./content-1-402751.html
|