我知道在数组中存在或不存在值我可以使用indexOf,但是如何使用对象数组呢?
const x = [{
"id": "roadshows",
"name": "Roadshows"
}, {
"id": "sporting_events",
"name": "Sporting Events"
}]
console.log( x.indexOf('roadshows') ) // don't work
答案 0 :(得分:6)
由于标记为ecmascript-6,因此这是一个ES6数组方法:Array#findIndex()
:
const x = [{
"id": "roadshows",
"name": "Roadshows"
}, {
"id": "sporting_events",
"name": "Sporting Events"
}]
console.log( x.findIndex( o => o.id === 'roadshows' ) )
如果您想要一种更具可重用性的方法,请考虑创建工厂isId(id)
:
function isId(id) {
return (o) => o.id === id;
}
const x = [{
"id": "roadshows",
"name": "Roadshows"
}, {
"id": "sporting_events",
"name": "Sporting Events"
}]
console.log( x.findIndex( isId('roadshows') ) )
这被称为“工厂”,因为它是一个在其范围内返回带有传递参数的函数的函数。
答案 1 :(得分:0)
你必须循环,因为你在数组中有对象。
for(var i = 0; i < x.length; i++) {
if (x[i].id== 'roadshows') {
console.log(i);
break;
}
}
或者,如果您只是检查该对象是否存在该ID,则过滤器很方便
if (x.filter(function(e) x.id== 'roadshows').length > 0) {
// Yay. Do Something
}
答案 2 :(得分:0)
手动我会做这样的事情:
for(let item of x) {
if ( item.hasOwnProperty('id') && item['id'] == 'roadshows' ) {
//do your stuff here
}
}
答案 3 :(得分:0)
你有几个选择。
首先,findIndex
。您传递一个函数来测试元素是否正在查找,它返回使该函数返回true
的第一个元素的索引。
x.findIndex((o) => o.id === 'roadshows');
const x = [{
"id": "roadshows",
"name": "Roadshows"
}, {
"id": "sporting_events",
"name": "Sporting Events"
}];
console.log(x.findIndex((o) => o.id === 'roadshows'));
另一个选项是mapping数组的相关属性和searching中的相应属性。
x.map((o) => o.id).indexOf('roadshows');
const x = [{
"id": "roadshows",
"name": "Roadshows"
}, {
"id": "sporting_events",
"name": "Sporting Events"
}];
console.log(x.map((o) => o.id).indexOf('roadshows'));
答案 4 :(得分:0)
如果你可以使用es6并希望返回有问题的对象,那么总会有Array.prototype.find()
x.find( item => { return item.id === "roadshows" } )
// returns {id: "roadshows", name: "Roadshows"}