使用lodash / underscore.js从数组中获取对象属性和值

时间:2015-01-07 09:30:43

标签: javascript arrays underscore.js lodash

Fiddle Example

我有一个这样的数组:

var array = [ { 
    'data-price': '0.00',
    'data-term': '532',
    'data-model_id': '409',
  },
  { 
    'data-price': '0.00',
    'data-term': '483',
    'data-model_id': '384',
  },
  { text: 'dffdfddgfdgf' } ];

我想过滤掉最后一个对象并从前两个对象中提取[{data-model_id:409},{data-model_id:384}]。我试过这段代码:

 var k = _(array).filter('data-model_id').pluck('data-model_id').value();
console.log(k);

并返回一个值数组["409", "384"]。是否有一个函数来返回lodash或下划线中的整个对象?

3 个答案:

答案 0 :(得分:4)

使用普通JS来显示逻辑:你需要filter输出没有密钥的元素,然后map将新集合改为另一种形式:

array.filter( function(item){
    return 'data-model_id' in item;
  }).map( function( item ){
    return { 'data-model_id' : item['data-model_id'] }
  });

http://jsfiddle.net/dn4tn6xv/7/

答案 1 :(得分:3)

如果我告诉你这可以使用原生的javascript怎么办?只需使用Array.filterObject.keys,使用前者进行过滤,然后使用后者获取密钥,然后通过比较Boolean返回Array的索引来返回Object.keys 1}}

var k = array.filter(function(obj){
   return Object.keys(obj).indexOf("data-model_id") > -1;
});

答案 2 :(得分:2)

lodash中你可以这样做:

获取完整对象

console.log(_.filter(array, 'data-model_id'));

仅获取data-model_id属性

var res = _.chain(array).filter('data-model_id').map(function (el) {
  return _.pick(el, 'data-model_id');
}).value();

Example