2017-09-09 12 views
0

私は '配列の配列'を扱っていて、2番目の配列に含まれるすべての '集合'が最初の配列に存在するかどうかをテストしようとしています。私の例では配列の配列を別の配列の中に見つける

var arr = [['Netherlands','PP3a'],['Austria','PP16a'],['Estonia','PP3a'],['Luxembourg','PP3a'],['Belgium','PP3a']]; 

var n = [['Luxembourg','PP3a'],['Netherlands','PP3a'],['Belgium','PP3a']]; 

https://jsfiddle.net/mnb8jddw/彼らは明らかに存在しているが、(ちなみに数字で動作するようだ)コードは、偽読み込みます。私は明らかに混乱してしまい、私が間違ったアプローチをしていると思っているので、本当に助けに感謝します。

var arr = [ 
    ['Netherlands', 'PP3a'], 
    ['Austria', 'PP16a'], 
    ['Estonia', 'PP3a'], 
    ['Luxembourg', 'PP3a'], 
    ['Belgium', 'PP3a'] 
]; 
var n = [ 
    ['Luxembourg', 'PP3a'], 
    ['Netherlands', 'PP3a'], 
    ['Belgium', 'PP3a'] 
]; 

function searchForArray(haystack, needle) { 
    var i, j, current; 
    for (var i in haystack) { 
    if (needle.length === haystack[i].length) { 
     current = haystack[i]; 
     for (j = 0; j < needle.length && needle[j] === current[j]; ++j); 
     if (j === needle.length) 
     return i; 
    } 
    } 
    return -1; 
} 

console.log(searchForArray(arr, n)); // -1 = false 
+0

を参照してください。 nの値。たとえば、 'searchForArray(arr、n [0]);'は3を返します。 –

+0

あなたの関数はどのインデックスを返すべきですか?あなたが検索した要素がその順序で存在しない – AndreaBogazzi

答えて

1

私はそれはあなたが探している答えですが、あなたが迅速かつ汚いソリューションを探しているなら、あなたはこのような何かを試すことができることはよく分からない:

const lookup = (ar, sets) => { 
    // concatenate each entry in the searched array 
    const _hashed = ar.map(i => i.join('')) 
    return sets.every((set) => { 
    // contatenate each entry to look for 
    const _set = set.join('') 
    // does the searched array contain the concatenated string? 
    return _hashed.indexOf(_set) > -1 
    }) 
} 

console.log(lookup(arr, n)) // => true 

に留意されたいです。要素の事項(すなわち:['Luxembourg', 'PP3a']は一致しますが、['PP3a', 'Luxembourg']はないでしょう)の順

はコードによると、針は1 subeでなければなりませんupdated fiddle

+0

なぜこのQ&Dと呼んでいるのかよく分かりません。それは素晴らしい仕事であり、私はあなたの助けに感謝します! – Silverburch

+0

Q&D 'map'と' every'メソッドは本当にスピードのために最適化されていないので、前述したように、すべてのユースケースに適合しません。順序が重要な場合は、文字列のソートを検討することができます( '.sort((a、b)=> a.localeCompare(b))) – cl3m

関連する問題