根据对象中另一个键的值获取键值。

5

我经常遇到一个情况,需要基于同一对象中的另一个键值来获取仅对象键 - 而不是整个对象 - 所有这些都来自对象数组。

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

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';
});

但这些会返回整个对象。我猜可以通过链式调用获取所需内容,但我不知道该如何实现。

谢谢。


你希望结果以什么形式呈现?字符串数组? - S McCrohan
@SMcCrohan 是的,那将是期望的结果。 - wonder95
4个回答

13

您可以使用本地的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})

运行完美。非常感谢。 - wonder95

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>


我以为我试过了。可能只是错了几个字符。 - wonder95

1
你可以使用filter方法返回类型为'beta'的项,然后使用map方法仅返回每个对象的item.name
myArray.
   filter(function(item){ return item.type === 'beta'; }).
   map(function(item){ return item.name; });

1

ES6使用参数解构:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接