繁体   English   中英

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

[英]Get object properties and values from array using lodash/underscore.js

小提琴的例子

我有一个像这样的数组:

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}]两个对象中提取[{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或下划线返回整个对象?

使用普通的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/

如果我告诉您仅使用本机javascript怎么办? 只需使用Array.filterObject.keys ,使用前者进行过滤,而后者获取键,然后通过比较Object.keys返回的Array的索引来返回Boolean

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

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM