2014-10-09 17 views
0

是否有一種簡單的方法可以知道數組是否包含另一個數組的所有元素?JavaScript中的array.contains(array)

例子:

var myarray = [1,2,3]; 
var searchinarray = [1,2,3,4,5]; 

searchinarray包含myarray中的所有元素,所以這應該返回true。

問候

回答

1

一個包含功能只應訪問存在的數組的成員,例如。

var myArray = [1,,2]; 
var searchInArray = [1,2,3]; 

contains(myArray, searchInArray); 

應該返回true,但是一個簡單的循環解決方案也將返回false myArray[1]不存在,因此將返回不確定,這是不存在的searchInArray。爲了容易避免和不能使用hasOwnProperty測試,可以使用Array every method

function contains(searchIn, array) { 
    return array.every(function(v){return this.indexOf(v) != -1}, searchIn); 
} 

使:

var a = [1,,3]; 
var s = [1,2,3,4,5]; 

console.log(contains(s, a)); // true 

您可以添加包含法陣的所有實例如果你願意:

if (typeof Array.prototype.contains == 'undefined') { 
    Array.prototype.contains = function(a) { 
    return a.every(function(v, i) { 
     return this.indexOf(v) != -1; 
    }, this); 
    } 
} 

console.log(s.contains(a));  // true 
console.log(s.contains([1,9])); // false 

你可能需要一個polyfill瀏覽器沒有。很多(IE 8?)。

2

這裏是函數的實現:

function contains(a, s) { 
    for(var i = 0, l = s.length; i < l; i++) { 
     if(!~a.indexOf(s[i])) { 
     return false; 
     } 
    } 
    return true; 
} 

這表明它確實你的描述:

> var myarray = [1,2,3]; 
> var searchinarray = [1,2,3,4,5]; 
> contains(myarray, searchinarray) 
false 
> contains(myarray, [1,2]) 
true 
> contains(myarray, [2,3]) 
true 
+0

這應該測試'[i]'實際存在,或者使用像* forEach *這樣的方法,它只訪問存在的's'成員。例如應該包含(s,[,, 1])'返回true或false? – RobG 2014-10-09 06:12:37

0
function compare(array, contains_array) { 
for(var i = 0; i < array.length; i++) { 
    if(contains_array.indexOf(array[i]) == -1) return false; 
} 
return true; 
} 

compare(myarray, searchinarray);