2015-02-03 3 views
0

Пусть у меня есть:Фильтр массив для подмножества ключей объектов

var JSONArray = [{'key1':'a1','key2':'a2','key3':'a3'}, 
       {'key1':'b1','key2':'b2','key3':'b3'}, 
       etc 
       ]; 

Как получить массив, который будет содержать те же объекты, но без 'key3'?

+0

это * JavaScript массив * из * объектов JavaScript *. Это не JSON и не имеет ничего общего с JSON. –

+0

Вы не можете иметь объект, который является ** таким же **, как и другой объект, но без какого-либо свойства. Тогда это будет другой объект, который может быть ** схожим ** с первым, но вы должны определить, какие подобные средства (например, те же собственные свойства, те же собственные свойства и тот же [[Прототип]], [[Прототип]], один - другой и т. д.). – Oriol

ответ

1

underscore.js может быть полезно.

Underscore - это библиотека JavaScript, которая предоставляет целый беспорядок полезных помощников по функциональному программированию без расширения каких-либо встроенных объектов.

var JSONArray = [ 
    {'key1':'a1','key2':'a2','key3':'a3'}, 
    {'key1':'b1','key2':'b2','key3':'b3'} 
]; 

_.map(JSONArray, function (x) { return _.omit(x, 'key3') }); 
=> [{'key1':'a1','key2':'a2'}, {'key1':'b1','key2':'b2'}] 

Работа sample

+0

Для полноты, было бы неплохо использовать _.reject, чтобы исключить «ключ3», как требует Radu B. – Franco

+0

Мой плохой ... Изменит ответ. –

0

Вы можете пройти через массив и удалить каждую пару ключей значение, где ключ является 'key3':

for (var i = 0; i < JSONArray.length; i++) { 
    delete JSONArray[i]['key3']; 
} 

JSONArray теперь будет:

[ 
    {key1: "a1", key2: "a2"}, 
    {key1: "b1", key2: "b2"} 
]; 
0

Возможно, используя карту и красный UCE?

var JSONArray = [{'key1':'a1','key2':'a2','key3':'a3'}, 
       {'key1':'b1','key2':'b2','key3':'b3'} 
       ]; 

JSONArray.map(function(obj){ 
    return Object.keys(obj).reduce(function(filtered, curr){ 
    if(curr !== 'key3'){ 
     filtered[curr] = obj[curr]; 
    } 
    return filtered; 
    }, {}); 
}); 
0
var JSONArray = [{'key1':'a1','key2':'a2','key3':'a3'}, 
       {'key1':'b1','key2':'b2','key3':'b3'}]; 

1. You can remove the values from the objects in the array: 

JSONArray.forEach(function(itm){ 
    delete itm.key3; 
}); 


new value of JSONArray:  
[{"key1":"a1","key2":"a2"},{"key1":"b1","key2":"b2"}] 


2. or you can clone a new array of new objects- 

var nokey3= 
JSON.parse(JSON.stringify(JSONArray)); 
nokey3.forEach(function(itm){ 
    delete itm.key3; 
}); 


value of JSONArray: 
[{"key1":"a1","key2":"a2","key3":"a3"}, 
{"key1":"b1","key2":"b2","key3":"b3"}] 

value of nokey3: 

[{"key1":"a1","key2":"a2"},{"key1":"b1","key2":"b2"}]