0

要素が 3 つの配列のいずれかに存在するかどうかを確認しようとしています。要素が見つかった配列の名前を返す方法がわかりません。誰でも私を正しい方向に向けることができますか?

検索の要素を引数として取り、配列名を返す関数をコーディングしました。

 var arr1 = ['a','b','c','d'];
 var arr2 = ['e','f','g','h'];
 var arr3 = ['i','j','k','l'];     

 function chkElem(elem)
 {
    var id = elem;
    var isFound = null;

    if(arr1.indexOf(id) || (arr2.indexOf(id) || (arr3.indexOf(id))))
    {
        isFound = ????      
    }
    return isFound;     
 }

親配列名を「isFound」変数に割り当てる方法がわかりません。

ありがとう。

4

5 に答える 5

2

関数ロジックで「変数名」を使用しないでください。代わりに、オブジェクトの配列プロパティを作成し、プロパティ名を返します。

var arrays = {
    "arr1": ['a','b','c','d'],
    "arr2": ['e','f','g','h'],
    "arr3": ['i','j','k','l']
};
for (var name in arrays)
    if (arrays[name].indexOf(id) > -1)
        return name;
return null;

または、さらに良いことに、配列の配列を使用して、インデックスを検索して返します。

var arrays = [
    ['a','b','c','d'],
    ['e','f','g','h'],
    ['i','j','k','l']
];
for (var i=0; i<arrays.length; i++)
    if (arrays[i].indexOf(id) > -1)
        return i;
return -1;
于 2012-08-21T16:58:45.013 に答える
1

1つずつテストします。

if (arr1.indexOf(id) > -1) {
  isFound = arr1;
} else if (arr2.indexOf(id) > -1) {
  isFound = arr2;
} else if (arr3.indexOf(id) > -1) {
  isFound = arr3;
}

または、多次元配列を作成します。

var arr = [
 ['a','b','c','d'],
 ['e','f','g','h'],
 ['i','j','k','l']
];

var isFound = null;

for (var i = 0; i < arr.length; i++) {
  if (arr[i].indexOf(elem) > -1) {
    isFound = arr[i];
    break;
  }
}
于 2012-08-21T16:58:03.537 に答える
1

まず、indexOf()トラップに注意してください-要求された文字列が見つからない場合は-1が返されます-これは真実です-したがって、次のように明示的にチェックする必要があります:

if (arr1.indexOf(id) != -1)

いいえ

if (arr1.indexOf(id))

真偽/偽の概念は、文字列が配列の最初の要素であり、indexOf()falseを返す場合、それは偽であり、一致が行われたとしても実際には条件が失敗することを意味します。

次に、配列の名前、より正確には、JSメモリで配列を参照する変数の名前を返すことはできません。次のいずれかを実行できます。

1)配列自体を返す

if (arr1.indexOf(id) != -1) return arr1;

2)配列を中央のオブジェクトに格納し、それを見つけたプロパティの名前を返します

var arrs = {
    'one': ['foo', 'bar']
    /* two, three etc */
};

for(var i in arrs)
    if (arrs[i].indexOf('foo') != -1)
        return i;
于 2012-08-21T17:01:06.277 に答える
0

物事のグループがある場合、それらを配列(順序付けられている場合)またはオブジェクト(名前が付けられている場合)に格納します。ほぼ同じ名前の変数を見つけた場合は、おそらく何か間違ったことをしていることになります。

 var things = [
    ['a','b','c','d'],
    ['e','f','g','h'],
    ['i','j','k','l']
 ];

次に、それらをループできます。

for (var i = 0; i < things.length; i++) {
    var thing = things[i];
    if (thing.indexOf(id) > -1) { // indexOf returns -1 if not found, and the index (starting from 0) if it is. 
        return i;
    }
}
return null;
于 2012-08-21T16:58:38.133 に答える
0
var arr1 = ['a', 'b', 'c', 'd'];
var arr2 = ['e', 'f', 'g', 'h'];
var arr3 = ['i', 'j', 'k', 'l'];

function chkElem(elem) {
    var isFound;
    (isFound = arr1).indexOf(elem) > -1 || (isFound = arr2).indexOf(elem) > -1 || (isFound = arr3).indexOf(elem) > -1;
    return isFound;
}

alert(chkElem('f'));
于 2012-08-21T17:13:00.267 に答える