猿问

如何在JavaScript中通过对象的属性获取索引?

例如,我有:


var Data = [

  { id_list: 1, name: 'Nick', token: '312312' },

  { id_list: 2, name: 'John', token: '123123' },

]

然后,例如,我想通过对该对象进行排序/反转name。然后我想得到这样的东西:


var Data = [

  { id_list: 2, name: 'John', token: '123123' },

  { id_list: 1, name: 'Nick', token: '312312' },

]

现在,我想知道具有属性的对象的索引,name='John'以获取属性标记的值。


我该如何解决这个问题?


莫回无
浏览 994回答 3
3回答

蝴蝶刀刀

正如其他答案所暗示的那样,遍历数组可能是最好的方法。但是我会把它放在它自己的函数中,并使它更抽象一些:function findWithAttr(array, attr, value) {&nbsp; &nbsp; for(var i = 0; i < array.length; i += 1) {&nbsp; &nbsp; &nbsp; &nbsp; if(array[i][attr] === value) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return i;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return -1;}var Data = [&nbsp; &nbsp; {id_list: 2, name: 'John', token: '123123'},&nbsp; &nbsp; {id_list: 1, name: 'Nick', token: '312312'}];这样,您不仅可以找到哪个包含“ John”,还可以找到哪个包含令牌“ 312312”:findWithAttr(Data, 'name', 'John'); // returns 0findWithAttr(Data, 'token', '312312'); // returns 1findWithAttr(Data, 'id_list', '10'); // returns -1编辑: 更新的函数返回-1时找不到,所以它遵循与Array.prototype.indexOf()相同的结构

MYYA

由于排序部分已经回答。我将提出另一种优雅的方法来获取数组中属性的indexOf您的示例是:var Data = [&nbsp; &nbsp; {id_list:1, name:'Nick',token:'312312'},&nbsp; &nbsp; {id_list:2,name:'John',token:'123123'}]你可以做:var index = Data.map(function(e) { return e.name; }).indexOf('Nick');Array.prototype.map在IE7或IE8上不可用。ES5兼容性这就是ES6和arrow语法,它更简单:const index = Data.map(e => e.name).indexOf('Nick');
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答