3 回答
TA贡献1801条经验 获得超8个赞
正如其他答案所暗示的那样,遍历数组可能是最好的方法。但是我会把它放在它自己的函数中,并使它更抽象一些:
function findWithAttr(array, attr, value) {
for(var i = 0; i < array.length; i += 1) {
if(array[i][attr] === value) {
return i;
}
}
return -1;
}
var Data = [
{id_list: 2, name: 'John', token: '123123'},
{id_list: 1, name: 'Nick', token: '312312'}
];
这样,您不仅可以找到哪个包含“ John”,还可以找到哪个包含令牌“ 312312”:
findWithAttr(Data, 'name', 'John'); // returns 0
findWithAttr(Data, 'token', '312312'); // returns 1
findWithAttr(Data, 'id_list', '10'); // returns -1
编辑: 更新的函数返回-1时找不到,所以它遵循与Array.prototype.indexOf()相同的结构
TA贡献1868条经验 获得超4个赞
由于排序部分已经回答。我将提出另一种优雅的方法来获取数组中属性的indexOf
您的示例是:
var Data = [
{id_list:1, name:'Nick',token:'312312'},
{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');
添加回答
举报