如果已知对象的其他属性,该如何返回该对象的属性?

时间:2018-12-18 20:51:25

标签: javascript arrays object

我有具有唯一名称的对象数组:

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

希望有一个更好的解决方案

2 个答案:

答案 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)

如果您不介意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