2016-08-13 2 views
-1

У меня есть массив объектов. НравитсяФильтрация массива объектов Использование Lodash или Javascript на основе имени свойства

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"}] 

кто-нибудь может помочь мне в этом

ответ

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() вызывается для каждого элемента в массив. Каждый элемент, для которого вы возвращаете правдивое значение, будет включен в результирующий массив.

В коде выше я просто проверить, если все три из этих специфических свойств присутствуют, хотя существуют и другие тесты можно использовать, что бы получить тот же результат для этих данных:

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, потому что они кажутся строковыми значениями.

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)); 
+2

Nice one. Вы даже можете написать 'result.filter (hasProperties);'. – Tholle

+0

@Tholle Спасибо. Я не знал. – James