我有具有唯一名称的对象数组:
let arr = [
{
'name':'B',
'id': 1
},
{
'name': 'c',
'id': 12
},
{
'name': 'a',
'id': 13
}
]
如果我知道id
,如何获得name
。例如,我有B
,它需要返回1
吗?
我的解决方案:
const foo = (arr, name) => arr.filter(el => el.name === name)[0].id
foo(arr, 'B') // 1
希望有一个更好的解决方案
答案 0 :(得分:1)
您应该使用Array.prototype.find()
而不是Array.prototype.filter()
,因为.find()
仅返回数组的 first 匹配元素-.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);
答案 1 :(得分:0)
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