Ответ 1
for(var i = 0; i < myArray.length; i++) {
if(myArray[i].color === 'blue') {
return i;
}
}
Там нет "чистого" способа, если вы не хотите привлекать стороннюю библиотеку. Underscore является хорошим для таких вещей.
если у меня есть массив вроде:
var myArray = [
{
'color':'red',
'name': 'redName'
},
{
'color':'blue',
'name': 'blueName'
},
{
'color':'green',
'name': 'greenName'
},
{
'color':'yellow',
'name': 'yellowName'
},
];
Как получить индекс, скажем, "синий"?
for(var i = 0; i < myArray.length; i++) {
if(myArray[i].color === 'blue') {
return i;
}
}
Там нет "чистого" способа, если вы не хотите привлекать стороннюю библиотеку. Underscore является хорошим для таких вещей.
Если вы уже используете ECMAScript 5 в своем коде, вы можете использовать это:
myArray
.map(function (element) {return element.color;})
.indexOf('blue');
Обратите внимание, что поддержка этих функций довольно ограничена (они не работают в Internet Explorer 8).
Кроме того, если вы в будущем, и используете ES6, вы можете это сделать:
myArray.map((el) => el.color).indexOf('blue');
То же, что и выше, но меньше.
Я знаю, что это супер старый, но Javascript es6 имеет отличный метод Array.prototype.findIndex(), поэтому вы можете просто сделать:
let index = myArray.findIndex((item) => item.color === 'blue');
// value of index will be "1"
Это не многомерный массив (или даже зубчатый массив, который используется вместо многомерных массивов в Javascript, поскольку они не существуют). Это массив объектов.
Вы можете прокручивать элементы в массиве:
var index;
for (var i = 0; i < myArray.length; i++) {
if (myArray[i].color == 'blue') {
index = i;
break;
}
}
Теперь переменная index
содержит значение 1
с данным примером.
Я предполагаю, что вы имеете в виду из своего примера, чтобы вернуть "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>
Например, например:
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'))
Итерируйте по массиву, ища значение внутри каждого элемента элемента. Сырой JavaScript не дает вам много работы.
Вы можете использовать . Метод findIndex()
В вашем случае
var findeMe = "blue";
myArray.findIndex(function(row){
return row.color == findMe;
});
Надеюсь, это поможет.