首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果对象的其他属性是已知的,如何返回该对象的属性?

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

Stack Overflow用户
提问于 2018-12-19 04:51:25
回答 2查看 51关注 0票数 0

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

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

希望这个问题有更好的解决方案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 0
EN

Stack Overflow用户

发布于 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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53840861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档