web-dev-qa-db-ja.com

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

私がこれを持っているとしましょう

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

それは私に与える

[0]100 [1]200など.

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

すなわち200のインデックスが欲しいのですが、1を返します。

179
jdborg

あなたは indexOf を使うことができます:

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

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

285
voigtan

オブジェクトの場合、配列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でサポートされています

57
Jaqen H'ghar

JQueryの関数を使う jQuery.inArray

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

これは、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);

IndexOfを使う

imageList.indexOf(200)
8
TROODON

indexOfはどうですか?

alert(imageList.indexOf(200));
6
gion_13

リストがそれほど長くない場合は、これが私が知っている最善の方法です。

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
Ryan

Internet ExplorerのいくつかのバージョンではArray.indexOfは動作しません - それをするにはたくさんの代替方法があります...この質問/答えを見てください: どうやって配列がJavaScriptのオブジェクトを含むかどうかチェックしますか?

5
ManseUK

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');
4
StepUp
// Instead Of 
var index = arr.indexOf(200)

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

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

0

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

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

elementPosition = array.indexOf(value);

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