Javascript indexOf对象数组

时间:2011-11-29 15:27:10

标签: javascript indexing

如果我有一个像:

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

如何获得说“蓝色”的索引?

9 个答案:

答案 0 :(得分:52)

如果您已在代码中使用ECMAScript 5,则可以使用:

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

请注意,对这些功能的支持非常有限(它们不适用于Internet Explorer 8)。

此外,如果你将来,并且你正在使用ES6,你可以这样做:

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

与上述相同,但更小。

答案 1 :(得分:48)

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

除非您想要涉及第三方库,否则没有“干净”的方式。 Underscore对于这样的人来说是个好人。

答案 2 :(得分:24)

我知道这是超级旧版但是Javascript es6有一个很棒的方法Array.prototype.findIndex(),所以你可以这样做:

String s = Console.ReadLine();
int x = 0;
Int32.TryParse(s, out x) ? Console.WriteLine("Foo") :  Console.WriteLine("bar");

答案 3 :(得分:10)

这不是一个多维数组(甚至是锯齿状数组,在Javascript中使用它代替多维数组,因为它们不存在)。那是一个对象数组。

您可以遍历数组中的项目:

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

现在,变量index包含值1,并附有给定示例。

答案 4 :(得分:3)

您可以使用.findIndex() method

在你的情况下

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

我希望它有所帮助。

答案 5 :(得分:2)

我猜你的意思是从你的例子中返回“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 :(得分:2)

例如:

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 :(得分:0)

迭代数组,查找每个元素对象中的值。原始JavaScript不会给你很多工作。

答案 8 :(得分:0)

就我而言,我构建了自己的函数,因为我希望循环在找到的第一个元素处停止。

这就是为什么带有 map 的解决方案不适用于这种情况,因为它们正在创建一个新数组。

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