2016-06-14 93 views

回答

0

當傳遞的範圍內,以自定義表函數,它得到要麼

  • 單個值,如果該範圍包括一個細胞,或
  • 雙陣列的其他方式。即使範圍是一維:例如,對於一個行範圍,您可以得到[[1], [2], [3]],對於某個行範圍,得到[[1, 2, 3]]

您的DIFF函數假定參數是普通的值數組。所以你需要扁平化雙數組,或者將單個值轉換爲數組。這是功能flatten的功能。

function flatten(arg) { 
    if (arg.constructor === Array) { 
    return arg.reduce(function(a, b) { 
     return a.concat(b); 
    }); 
    } 
    else { 
    return [arg]; 
    } 
} 

然後DIFF可以是這樣的:

function DIFF(a, b) { 
    a = flatten(a); 
    b = flatten(b); 
    return a.filter(function(v) { 
    return b.indexOf(v) === -1; 
    }).length 
} 

(旁白:三元操作: ? true : false是多餘的在這裏,所以我刪除它)

相關問題