使用Lodash或基于属性名称的Javascript过滤对象数组

时间:2016-08-13 01:58:26

标签: javascript arrays underscore.js lodash

我有对象数组。喜欢这个

var result=[{"batchId":123, "licenseId":2345ef34, "name":"xxx"},
{"batchId":345, "licenseId":2345sdf334, "name":"www"},
{"batchId":145, "licenseId":234sdf5666, "name":"eee"},
{"batchId":455, "licenseId":asfd236645 },
{"batchId":678, "name":"aaa"}]

我想拥有包含所有三个属性的数组。输出应该是这样的。

[{"batchId":123, "licenseId":2345ef34, "name":"xxx"},
    {"batchId":345, "licenseId":2345sdf334, "name":"www"},
    {"batchId":145, "licenseId":234sdf5666, "name":"eee"}]

任何人都可以帮我这个

2 个答案:

答案 0 :(得分:4)

使用array .filter() method

这很简单



var result=[
  {"batchId":123, "licenseId":"2345ef34", "name":"xxx"},
  {"batchId":345, "licenseId":"2345sdf334", "name":"www"},
  {"batchId":145, "licenseId":"234sdf5666", "name":"eee"},
  {"batchId":455, "licenseId":"asfd236645" },
  {"batchId":678, "name":"aaa"}
];

var filtered = result.filter(function(v) {
      return "batchId" in v && "licenseId" in v && "name" in v;
    });

console.log(filtered);




为数组中的每个元素调用传递给.filter()的函数。返回truthy值的每个元素都将包含在结果数组中。

在上面的代码中,我只测试是否存在所有这三个特定属性,尽管您可以使用其他测试来获得与该数据相同的结果:



var result=[ {"batchId":123, "licenseId":"2345ef34", "name":"xxx"}, {"batchId":345, "licenseId":"2345sdf334", "name":"www"}, {"batchId":145, "licenseId":"234sdf5666", "name":"eee"}, {"batchId":455, "licenseId":"asfd236645" }, {"batchId":678, "name":"aaa"} ];

var filtered = result.filter(function(v) {
      return Object.keys(v).length === 3;
    });

console.log(filtered);




请注意,您需要将licenseId值放在引号中,因为它们似乎是字符串值。

答案 1 :(得分:2)

var result = [{
  "batchId": 123,
  "licenseId": '2345ef34',
  "name": "xxx"
}, {
  "batchId": 345,
  "licenseId": '2345sdf334',
  "name": "www"
}, {
  "batchId": 145,
  "licenseId": '234sdf5666',
  "name": "eee"
}, {
  "batchId": 455,
  "licenseId": 'asfd236645'
}, {
  "batchId": 678,
  "name": "aaa"
}];

function hasProperties(object) {
  return object.hasOwnProperty('batchId') && object.hasOwnProperty('licenseId') && object.hasOwnProperty('name')
}

result.filter(e => hasProperties(e));