【问题标题】:Get key value based on value of another key in object根据对象中另一个键的值获取键值
【发布时间】:2017-08-03 01:28:20
【问题描述】:

我有一个案例,我需要根据同一个对象中的另一个键值获取一个对象键,而不是整个对象,所有这些都来自一个对象数组。

例如,如果我有以下对象数组:

myArray = [
  {
    name: Person 1
    type: alpha
  },
  {
    name: Person 2
    type: beta
  },
  {
    name: Person 3
    type: gamma
  },
  {
    name: Person 4
    type: beta
  },
  {
    name: Person 5
    type: gamma
  },
];

因此,如果我只想获取那些具有“beta”类型的对象的名称值,我该怎么做?我更喜欢 lodash,而且我知道如何使用 _.map 或 _.filter,例如

var newArray = _.map(myArray, function(item) {
  return item.type === 'beta';
});

但是那些返回整个对象。我怀疑我可以通过链接获得我想要的东西,但我不知道如何做到这一点。

谢谢。

【问题讨论】:

  • 你想要什么形式的结果?字符串数组?
  • @SMcCrohan 是的,这将是我们想要的结果。

标签: javascript arrays object lodash


【解决方案1】:

您可以使用本机 Array.prototype.map() 执行此操作。它看起来像这样(为了简洁起见,使用 ES6 粗箭头函数):

myArray.filter(item => item.type === 'beta').map(item => item.name)

ES5 的形式是:

myArray.filter(function(item) {return item.type === 'beta'})
     .map(function(item) {return item.name})

【讨论】:

  • 完美运行。非常感谢。
【解决方案2】:

这是一个使用 mapfilter 的 lodash 解决方案。

var result = _(myArray).filter({ type: 'beta' }).map('name').value();

var myArray = [
  {
    name: 'Person 1',
    type: 'alpha'
  },
  {
    name: 'Person 2',
    type: 'beta'
  },
  {
    name: 'Person 3',
    type: 'gamma'
  },
  {
    name: 'Person 4',
    type: 'beta'
  },
  {
    name: 'Person 5',
    type: 'gamma'
  },
];

var result = _(myArray).filter({ type: 'beta' }).map('name').value();

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

【讨论】:

  • 当,我以为我试过了。我一定是被几个字符弄丢了。
【解决方案3】:

您可以使用filter 方法返回'beta' 类型的项目,然后使用map 方法仅返回每个对象的item.name

myArray.
   filter(function(item){ return item.type === 'beta'; }).
   map(function(item){ return item.name; });

【讨论】:

    【解决方案4】:

    带有参数解构的ES6:

    myArray.filter(({type}) => type === 'beta').map(({name}) => name)
    

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多