値を持つ配列インデックスを見つける方法は?


199

これを持っていると言う

imageList = [100,200,300,400,500];

それは私に与えます

[0]100 [1]200

JavaScriptで値を持つインデックスを返す方法はありますか?

つまり、200のインデックスが必要です。1が返されます。


5
ここで優秀な答えは- > stackoverflow.com/questions/237104/...
マンス

回答:


316

使用できますindexOf

var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

配列に値が見つからない場合は-1が返されます。


2
これを修正するには、developer.mozilla.org / en / JavaScript / Reference / Global_Objects / … または任意のJavaScriptフレームワークを使用できます。
voigtan

1
IE8では機能しないことがわかりました。私の代わりは何ですか?
joedborg 2011

@voigtanこれをJSに追加するにはどうすればよいですか。
joedborg 2011

5
ありがとうございます。IEはいつか現代に追いつくでしょう!
joedborg 2011

また、互換モードの場合、最近のIEでは機能しません
2013年

74

Arrayオブジェクトを使用するmapindexOf

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.map(function (img) { return img.value; }).indexOf(200);

console.log(index);


最新のブラウザでは次のものが使用できますfindIndex

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.findIndex(img => img.value === 200);

console.log(index);

ES6の一部であり Chrome、FF、Safari、Edgeでサポートされています


1
findIndexはIE 11に実装されていないことに注意してください
Bindrid

2
@Bindridは回答に記述されています。「ES6の一部であり、Chrome、FF、Safari、および(残念ながらのみ)IEエッジでサポートされています」
Jaqen H'ghar

17

jQueryの関数jQuery.inArrayを使用する

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )

正解としてマークされたコードを使用する予定でしたが、そのコードはIEのすべてのバージョンで機能しないようです。この回答はIEのすべてのバージョンで機能しますが、コードを少し変更しました。var arrayPosition = $ .inArray(value、Array); 完全に動作します
James Blackburn

6
jQuery≠Javascript
Andrew

13

これは、JavaScriptの複雑な配列で値のインデックスを見つける別の方法です。確かに誰かを助けることを願っています。次のようなJavaScript配列があるとします。

var studentsArray =
     [
    {
    "rollnumber": 1,
    "name": "dj",
    "subject": "physics"
   },
   {
   "rollnumber": 2,
  "name": "tanmay",
  "subject": "biology"
   },
  {
   "rollnumber": 3,
   "name": "amit",
   "subject": "chemistry"
   },
  ];

次に、配列内の特定のオブジェクトを選択する必要がある場合。Tanmayという名前の学生のインデックスを検索するとします。

これは、配列を反復処理し、指定されたキーの値を比較することで実行できます。

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

    for (var i = 0; i < arraytosearch.length; i++) {

    if (arraytosearch[i][key] == valuetosearch) {
    return i;
    }
    }
    return null;
    }

この関数を使用して、以下のように特定の要素のインデックスを見つけることができます。

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);



6

Array.indexOfInternet Explorerの一部のバージョンでは機能しません-しかし、それを行うには多くの代替方法があります...この質問/回答を参照してください:配列にJavaScriptのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?


このページによれば、developer.mozilla.org
en

リンクしたページの@Simon_Weaverには、JavaScript 1.6以降を使用するすべてのブラウザー用のポリフィルがあります
Manse

5

リストが極端に長くない場合、これが私が知る最良の方法です。

function getIndex(val) {
    for (var i = 0; i < imageList.length; i++) {
        if (imageList[i] === val) {
            return i;
        }
    }
}

var imageList = [100, 200, 300, 400, 500];
var index = getIndex(200);

5

ES6関数を使用することが可能Array.prototype.findIndexです。

MDNさんのコメント

このfindIndex()メソッドは、指定されたテスト関数を満たす配列の最初の要素のインデックスを返します。それ以外の場合は-1が返されます。

var fooArray = [5, 10, 15, 20, 25];
console.log(fooArray.findIndex(num=> { return num > 5; }));

// expected output: 1

オブジェクトプロパティでインデックスを検索します。

オブジェクトプロパティでインデックスを検索するには:

yourArray.findIndex(obj => obj['propertyName'] === yourValue)

たとえば、次のような配列があります。

let someArray = [
    { property: 'OutDate' },
    { property: 'BeginDate'},
    { property: 'CarNumber' },
    { property: 'FirstName'}
];

次に、必要なプロパティのインデックスを検索するコードは次のようになります。

let carIndex = someArray.findIndex( filterCarObj=> 
    filterCarObj['property'] === 'CarNumber');

0

これが私の見解です、ほとんどの人々のソリューションはアイテムが存在するかどうかをチェックせず、存在しない場合はランダムな値を削除するようです。

まず、要素のインデックスを探して、要素が存在するかどうかを確認します。存在する場合は、spliceメソッドを使用してインデックスで削除します

elementPosition = array.indexOf(value);

if(elementPosition != -1) {
  array.splice(elementPosition, 1);
}

0

多次元配列で


参照配列:

var array = [
    { ID: '100', },
    { ID: '200', },
    { ID: '300', },
    { ID: '400', },
    { ID: '500', }
];

使用するfilterindexOf

var in_array = array.filter(function(item) { 
    return item.ID == '200' // look for the item where ID is equal to value
});
var index = array.indexOf(in_array[0]);

を使用して配列内の各項目をループするindexOf

for (var i = 0; i < array.length; i++) {
    var item= array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}

-1
// Instead Of 
var index = arr.indexOf(200)

// Use 
var index = arr.includes(200);

注意:Include関数は配列の単純なインスタンスメソッドであり、項目が配列内にあるかどうかを簡単に見つけるのに役立ちます(indexOfとは異なりNaNを含む)。


1
これに加えて、インデックス/アイテムを取得するのではなく、存在するかどうかのみを通知
moto

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.