2015-01-17 6 views
-1

У меня есть массив JSON как это:Создание массива объектов JSON из другого массива JSON объектов

[{Company:"", FirstName:"John", SecondName:"Smith", ID:"2345"}, 
{Company:"SomeComp", FirstName:"", SecondName:"Kane", ID:"4363"}, 
{Company:"Random", FirstName:"Tom", SecondName:"", ID:"6454"}] 

Я хочу, чтобы разобрать это и создать новый массив объектов, которые имеют только непустые атрибуты без ID, т. Е.

[{FirstName:"John", SecondName:"Smith"}, 
{Company:"SomeComp", SecondName:"Kane"}, 
{Company:"Random", FirstName:"Tom"}] 

Каков наилучший способ сделать это в Javascript?

+1

петля Только над данными? 'for' или' map() '/' filter() 'не имеет большого значения. – Sirko

ответ

2

Вы можете использовать map

Метод карты() создает новый массив с результатами вызова предоставленную функцию для каждого элемента в этом массиве.

var companies = [{Company:"", FirstName:"John", SecondName:"Smith", ID:"2345"}, 
 
{Company:"SomeComp", FirstName:"", SecondName:"Kane", ID:"4363"}, 
 
{Company:"Random", FirstName:"Tom", SecondName:"", ID:"6454"}]; 
 
    
 
// This returns a new array 
 
var newArray = companies.map(function(item) { 
 
    var obj = {}; 
 
    for(var prop in item) { 
 
      if (item[prop] !== "" && prop !== "id") { 
 
       obj[prop] = item[prop]; 
 
      }; 
 
    } 
 
    return obj; 
 
}); 
 
    
 
console.log(newArray);

0

Это должно сделать это

var input = JSON.parse("<YOUR JSON HERE>"); 
var output = []; 
input.forEach(function(item) { 
    delete item.ID; 
    for (var prop in item) { 
     if (item.hasOwnProperty(prop) && item[prop] === "") { 
       item[prop] = undefined; 
     }    
    } 
output.push(item); 
}); 
+0

По какой причине вы не использовали карту? –

+0

Если честно, нет. Это перешло мне в голову, но мой мозг ошибочно сказал мне, что «карта» была признаком подчеркивания/lodash. –

+0

Два предложения: Это изменяет объекты в исходном массиве, который я не уверен, желательно, хотя это не ясно из вопроса, но звучит так, потому что OP хочет новый массив. Если изменение исходного объекта в порядке, подумайте об использовании 'delete item [prop]', чтобы нежелательное свойство не отображалось в цикле 'for'. –

Смежные вопросы