2011-07-12 29 views
0

配列内の配列の有無を検索する必要があります。これはjQuery.inArray関数に似ています。配列内の配列の検索

var a = [ [1,2], [1,3] ]; 
console.log( jQuery.inArray([1,3],a )) 

のために私が得る-1 ANSとして。これを行う方法?

(つまり、クロムである)あなたのV8で

答えて

2

ありがとう、気の利いたトリックがあります:==<= && >=はありません、配列のために動作しませんが。

あなたが反復処理し、それがappearentだ場合は、各項目をチェックすることができます。

http://www.svendtofte.com/code/usefull_prototypes/prototypes.js

Array.prototype.compareArrays = function(arr) { 
    if (this.length != arr.length) return false; 
    for (var i = 0; i < arr.length; i++) { 
     if (this[i].compareArrays) { //likely nested array 
      if (!this[i].compareArrays(arr[i])) return false; 
      else continue; 
     } 
     if (this[i] != arr[i]) return false; 
    } 
    return true; 
} 
:あなたは、配列の平等をチェックする機能が必要と思い、他のブラウザのために

for(var i = 0; i < a.length; i++) { 
    if(a[i] >= [1, 3] && a[i] <= [1, 3]) alert(i); 
} 

次に:

for(var i = 0; i < a.length; i++) { 
    if(a[i].compareArrays([1, 3])) alert(i); 
} 
+0

他のブラウザについて – robert

+0

@robert:私の編集を参照してください。 – pimvdb

+0

@pmvidb ...ありがとう – robert

1
function inArray (needle, haystack) { 
    for (var idx in haystack) { 
     if (haystack[idx].join(',') == needle.join(',')) 
      return idx; 
    } 
    return -1; 
} 
+0

いいですが、[[1,2]、3] .join( "、")=== [1、[2,3]]。join( "、") 'それで100%信頼できない – pimvdb

0

はしてみてください。この

function look4arr(arr, v) { 
    for (var i = 0, l = arr.length; i < l; i += 1) { 
     if (arr[i].toString() === v.toString()) { //or use +'' 
      return true; 
     } 
    } 
    return false; 
} 
var a = [[1,2], 2], 
    ok = [1,2], 
    ko = [2,3] 
look4arr(a, ok); // true 
look4arr(a, ko); // false 
// as far as the array you are looking at contains primitives seem to work fine 

あなたが何かを検索する必要がある場合は、「より多くの」...私は、オブジェクトリテラル、正規表現、あなたは以下の1

function look4x(arr, v) { 
    for (var i = 0, isObjOrArray = false, l = arr.length; i < l; i += 1) { 
     isObjOrArray = {}.toString.call(arr[i]).match(/\[object\s(Array|Object)\]/); 
     if (
      (isObjOrArray && JSON.stringify(arr[i])+'' == JSON.stringify(v)+'') 
      || 
      (!isObjOrArray && arr[i].toString() === v.toString()) 
     ) { 
      return true;//or i if a jQuery.inArray output is needed 
     } 
    } 
    return false; // or -1 ... if ... jQuery.inArray 
} 
var a = [ 
     [1,[1,[1,[1,2]]]], 
     2, 
     true, 
     'hei', 
     Infinity, 
     {"o" : "s", 'd':[1,2,3]}, 
     new RegExp(/\s/), 
     function(){alert('hei');} 
    ], 
    ok = [1,[1,[1,[1,2]]]]; 

alert(
    look4x(a, [1,[1,[1,[1,2]]]]) 
    && 
    look4x(a, true) 
    && 
    look4x(a, 'hei') 
    && 
    look4x(a, Infinity) 
    && 
    look4x(a, {"o" : "s", 'd':[1,2,3]}) 
    && 
    look4x(a, new RegExp(/\s/)) 
    && 
    look4x(a, function(){alert('hei');}) 
); // true, in this case 
と同様の機能を使用することができ 機能を意味します

私はまだ完全なテストでテストしていません。私はテストをできるだけ早く投稿します

イベント私が遅刻していると思われる場合、それが誰かを助けることを願っています。

bye

+0

オブジェクトリテラルを含む配列を探すときにエラーが発生する... – fedeghe

+0

ok、オブジェクトリテラルで配列を正しく検索するようになりました。 – fedeghe