我有一个具有唯一名称的对象数组:
let arr = [
{
'name':'B',
'id': 1
},
{
'name': 'c',
'id': 12
},
{
'name': 'a',
'id': 13
}
]
如果我知道name
,如何获取id
。例如,我有B
,但它需要返回1
?
我的解决方案是:
const foo = (arr, name) => arr.filter(el => el.name === name)[0].id
foo(arr, 'B') // 1
希望这个问题有更好的解决方案
发布于 2018-12-19 05:22:01
如果你不介意IE不支持Array.prototype.find
,并且如果没有找到项目,它可能会导致错误,那么它对于少量的查找是很好的。对于多个查找,我建议创建一个查找对象:
const arr = [ { name:'B', id: 1 }, { name: 'c', id: 12 }, { name: 'a', id: 13 } ]
const obj = arr.reduce((o, v) => (o[v.name] = v.id, o), {})
console.log( obj['B'] ) // 1
console.log( obj['A'] ) // undefined
如果碰巧数据来自JSON.parse
:
const obj = {}, json = '[{"name":"B","id":1},{"name":"c","id":12},{"name":"a","id":13}]'
JSON.parse(json, (k, v) => v.name ? (obj[v.name] = v.id) : v)
console.log( obj['B'] ) // 1
console.log( obj['A'] ) // undefined
发布于 2018-12-19 05:09:35
您应该使用Array.prototype.find()
而不是Array.prototype.filter()
,因为.find()
只返回数组中第一个匹配的元素- .filter()
返回所有匹配的元素。您的代码应如下所示:
const foo = (arr, name) => arr.find(el => el.name == name).id;
工作代码段:
let arr = [
{
'name': 'B',
'id': 1
},
{
'name': 'c',
'id': 12
},
{
'name': 'a',
'id': 13
}
]
const foo = (arr, name) => arr.find(el => el.name == name).id;
var theID = foo(arr, 'B');
console.log(theID);
https://stackoverflow.com/questions/53840861
复制相似问题