1

私が少しトリッキーだと思ういくつかの使用法は

2 in [1, 3, 5]

for (var i in [1, 3, 5]) { ... }

str = "hello";
for (var i in str) { ... }

最初の行はtrue(私はすぐに言ったかもしれません2 in [1, 3, 5]false)であり、2番目の行は1、3、5ではなく0、1、2をループし、最後の部分は。の代わりに0から4をループします'h', 'e', 'l', 'l', 'o'。今、私はただ使用しています:in配列のfor、または配列のfor-inループを見るときはいつでも、代わりにすぐにインデックスについて考えてください。それ以外の場合、この落とし穴を回避するために使用できる方法または使用パターンはありますか?

4

3 に答える 3

2

はい、「アレイには使用しない」inと呼ばれています。オブジェクトに特定のキーがあるかどうかをテストするため、配列で適切に使用することはできません。

また、のプロパティを反復処理する場合を除いて、を使用しfor(var x in something)ないでくださいsomething

値が配列に含まれているかどうかを確認するには、~arr.indexOf(value)-を使用します。またはarr.IndexOf(value) != -1、より詳細な値が必要な場合は、を使用します。

配列内の要素を反復処理するには、for(var i = 0; i < arr.length; i++)

于 2012-10-07T13:03:10.570 に答える
1

inキーワードは、このようなオブジェクトで使用することを目的としています(MDNサイトから取得)

// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees;        // returns true
3 in trees;        // returns true
6 in trees;        // returns false
"bay" in trees;    // returns false (you must specify the index number,
                  // not the value at that index)
"length" in trees; // returns true (length is an Array property)

// Predefined objects
"PI" in Math;          // returns true
var myString = new String("coral");
"length" in myString;  // returns true

// Custom objects
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar;  // returns true
"model" in mycar; // returns true

配列はオブジェクトと考えることができます。配列['zero', 'one', 'two']はオブジェクトのようなものです{0: 'zero', 1: 'one', 2: 'two'}

したがって、for (i in ['zero', 'one', 'two'])javascriptを作成すると、を作成したかのように扱われますfor (i in {0: 'zero', 1: 'one', 2: 'two'})

オブジェクトに次のような特定のプロパティ値があるかどうかを確認できます。

function isIn(val, obj) {
  for (var i in obj) if (obj[i] == val) return true;
  return false;
}

isIn('car', ['car', 'horse']) // returns true

任意のオブジェクトだけでなく配列を具体的にチェックしている場合は、その引数のインデックスを返すindexOfメソッドを使用できます。または、配列の-1に引数が含まれていません。

function isInArray(val, arr) {return arr.indexOf(val) > -1;}

isIn('car', ['car', 'horse']) // returns true
于 2012-10-07T13:34:15.047 に答える
1

メソッドを使用できますindexOfjsfiddle

アレイ用

var arr = [1,2,3,4];
arr.indexOf(2); // will return index of item if exist other wise return -1;

文字列の場合

var str = 'Hello world';
str.indexOf('e')
console.log(str.indexOf('e'),str.indexOf('n'));

</ p>

于 2012-10-07T13:03:07.247 に答える