Подтвердить что ты не робот

Javascript indexOf для массива объектов

если у меня есть массив вроде:

var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];

Как получить индекс, скажем, "синий"?

4b9b3361

Ответ 1

for(var i = 0; i < myArray.length; i++) {
   if(myArray[i].color === 'blue') {
     return i;
   }
}

Там нет "чистого" способа, если вы не хотите привлекать стороннюю библиотеку. Underscore является хорошим для таких вещей.

Ответ 2

Если вы уже используете ECMAScript 5 в своем коде, вы можете использовать это:

myArray
    .map(function (element) {return element.color;})
    .indexOf('blue');

Обратите внимание, что поддержка этих функций довольно ограничена (они не работают в Internet Explorer 8).

Кроме того, если вы в будущем, и используете ES6, вы можете это сделать:

myArray.map((el) => el.color).indexOf('blue');

То же, что и выше, но меньше.

Ответ 3

Я знаю, что это супер старый, но Javascript es6 имеет отличный метод Array.prototype.findIndex(), поэтому вы можете просто сделать:

let index = myArray.findIndex((item) => item.color === 'blue');
// value of index will be "1"

Ответ 4

Это не многомерный массив (или даже зубчатый массив, который используется вместо многомерных массивов в Javascript, поскольку они не существуют). Это массив объектов.

Вы можете прокручивать элементы в массиве:

var index;
for (var i = 0; i < myArray.length; i++) {
  if (myArray[i].color == 'blue') {
    index = i;
    break;
  }
}

Теперь переменная index содержит значение 1 с данным примером.

Ответ 5

Я предполагаю, что вы имеете в виду из своего примера, чтобы вернуть "1"? Вот функция для вас...

<script type='text/javascript'>
var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];
function getIndexOf(a,v) {
  var l = a.length;
  for (var k=0;k<l;k++) {
    if (a[k].color==v) {
        return k;
      }
  }                      
  return false;
}

alert (getIndexOf(myArray,'blue'));
</script>

Ответ 6

Например, например:

DEMO

Array.prototype.objIndexOf = function(val) {
    var cnt =-1;
    for (var i=0, n=this.length;i<n;i++) {
      cnt++;
      for(var o in this[i]) {
        if (this[i].hasOwnProperty(o) && this[i][o]==val) return cnt;
      }
    }
    return -1;
}
var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];
    alert(myArray.objIndexOf('blue'))

Ответ 7

Итерируйте по массиву, ища значение внутри каждого элемента элемента. Сырой JavaScript не дает вам много работы.

Ответ 8

Вы можете использовать . Метод findIndex()

В вашем случае

var findeMe = "blue";
myArray.findIndex(function(row){
return row.color == findMe;
});

Надеюсь, это поможет.