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

时间:2017-03-13 04:37:50

标签: javascript arrays object lodash

我有一个案例,我不断遇到我只需要一个对象键 - 而不是整个对象 - 基于同一对象中的另一个键值,所有这些都来自一个对象数组。

例如,如果我有这个对象数组:

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

因此,如果我想获得那些类型为'beta'的对象的名称值,我该怎么做?我更喜欢lodash,我知道如何使用_.map或_.filter,例如

library(ggmap)
lat <- 39.86+rnorm(10,0.5)
lng <- -82.59 + rnorm(10, 0.5)
sightings <- data.frame(cbind(lng,lat))

map<-get_map(location='Ohio', zoom = 6,maptype='hybrid',source="google")
ggmap(map) + geom_point(data=sightings, aes(x=lng,y=lat))

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

感谢。

4 个答案:

答案 0 :(得分:3)

您可以使用原生Array.prototype.map()执行此操作。它看起来像这样(使用ES6 fat-arrow函数来简洁):

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

答案 1 :(得分: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>

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

带参数解构的ES6:

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