Метод indexOf в массиве объектов? - PullRequest
445 голосов
/ 29 декабря 2011

Какой лучший способ получить индекс массива, который содержит объекты?

Представьте себе этот сценарий:

var hello = {
    hello: 'world',
    foo: 'bar'
};
var qaz = {
    hello: 'stevie',
    foo: 'baz'
}

var myArray = [];
myArray.push(hello,qaz);

Теперь я хотел бы иметь indexOf объект, свойство hello которого равно 'stevie', которое в этом примере будет 1.

Я довольно новичок в JavaScript, и я не знаю, существует ли простой метод или мне нужно создать собственную функцию для этого.

Ответы [ 27 ]

2 голосов
/ 29 декабря 2011

См. Этот пример: http://jsfiddle.net/89C54/

for (i = 0; i < myArray.length; i++) {
    if (myArray[i].hello === 'stevie') {
        alert('position: ' + i);
        return;
    }
}

Начинает считать с нуля.

1 голос
/ 09 января 2015

Это способ найти индекс объекта в массиве

    var myArray = [{  hello: 'world',
        foo: 'bar'
    },{
        hello: 'stevie',
        foo: 'baz'
    }];



    for (i = 0; i < myArray.length; i++) {
        if (myArray[i].hello === 'stevie') {
            alert('position: ' + i);
            return;
        }
    }
0 голосов
/ 01 августа 2015

Это работает без пользовательского кода

var arr, a, found;
arr = [{x: 1, y: 2}];
a = {x: 1, y: 2};
found = JSON.stringify(arr).indexOf(JSON.stringify(a)) > - 1;
// found === true

Примечание: это не дает фактический индекс, оно только говорит, существует ли ваш объект в текущей структуре данных

0 голосов
/ 06 ноября 2017
var hello = {hello: "world",  foo: "bar"};
var qaz = {hello: "stevie", foo: "baz"};
var myArray = [];
myArray.push(hello,qaz);

function indexOfObject( arr, key, value   ) {
    var j = -1;
    var result = arr.some(function(obj, i) { 
        j++;
        return obj[key] == value;
    })

    if (!result) {
        return -1;
    } else {
        return j;
    };
}

alert(indexOfObject(myArray,"hello","world"));
0 голосов
/ 18 апреля 2014

Вы можете создать свой собственный прототип, чтобы сделать это:

что-то вроде:

Array.prototype.indexOfObject = function (object) {
    for (var i = 0; i < this.length; i++) {
        if (JSON.stringify(this[i]) === JSON.stringify(object))
            return i;
    }
}
0 голосов
/ 04 февраля 2014

Я предпочитаю использовать findIndex() метод:

 var index = myArray.findIndex('hello','stevie');

index даст вам индексный номер.

0 голосов
/ 14 июня 2016

Вы можете просто использовать

const someId = 2;
const array = [{id:1}, {id:2}, {id:3}];
const index = array.reduce((i, item, index) => item.id === someId ? index : i, -1);
alert('someId ' + someId + ' is at index ' + index);

Нет подчеркивания, нет, просто сокращение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...