2014-10-16 4 views
0

У меня есть массив JSON объектов, как это:Вырезать данные из массива JSON объектов

[ { id: 841, 
    when: 'date', 
    who: 'asd', 
    what: 'what', 
    key1 : 'a key', 
    key2 : 'a key' 
    _id: 544034ab914ae3b9270545c1, 
    __v: 0 }, 
{ id: 841, 
    when: 'date', 
    who: 'asd', 
    what: 'what', 
    key1 : 'a key', 
    key2 : 'a key' 
    _id: 544034ab914ae3b9270545c1, 
    __v: 0 } ] 

Я хочу, чтобы сократить key1 и key2 от этого объекты и хотят, чтобы увидеть это:

[ { id: 841, 
    when: 'date', 
    who: 'asd', 
    what: 'what', 
    _id: 544034ab914ae3b9270545c1, 
    __v: 0 }, 
{ id: 841, 
    when: 'date', 
    who: 'asd', 
    what: 'what', 
    _id: 544034ab914ae3b9270545c1, 
    __v: 0 } ] 

Как можно ли вырезать эти ключи и значения?

Мой метод не работает. (Псевдо):

var new_array 
for i old_array.length 
    delete old_array[i].key1 
    delete old_array[i].key2 
new_array.push(old_array[i]) 
+1

Что именно не работает? Это должно быть хорошо. Но стоит отметить, что вам не нужно создавать новый массив. Удалить редактирует объект на месте, поэтому, если вы удаляете свойство из объекта, содержащегося в массиве, исходный массив должен немедленно отражать эти изменения. – Brennan

+0

@Brennan Я не знаю, но это толкает старую версию объектов. Кстати, это из запроса mongodb, если это имеет значение. – Lazy

ответ

0

Я использовал underscore.js

var cutted_object = _.omit(json_object, "key1", "key2" 
             "key2", "date", 
             "id33", "etc"); 
1
yourArray = yourArray.map(function(current, index, arr){ 
    delete current.key1; 
    delete current.key2; 
    return current; 
}); 

Это должно делать то, что вы хотите ;-)

Надежда, что помогает, Jan

+0

Больше памяти, чем просто удаление на месте. –

+0

Thats true, спасибо, что указали это, Майк! Вы можете сделать «удалить arr [index] .key1;» и то же самое для key2. – jfornoff

+0

Спасибо. Я получаю '[undefined, undefined]' с обоими вашими методами. Что может быть вызвано этим? – Lazy

0

Вы псевдо-код, в основном то, что вам нужно, если вы можете просто удалите свойства на месте:

var arr = [...]; // your array 
for (var i = 0; i < arr.length; i++) { 
    delete arr[i].key1; 
    delete arr[i].key2; 
} 
+0

Этот метод wasn Я работаю, и я не мог найти, почему. Спасибо. @Mike Brant – Lazy

+1

Немного поменьше, должен быть var i = 0 ;-) – jfornoff

+0

... и массив не определен. – PHPglue

0

function deleteProps(){ 
    var a = Array.slice(arguments) || Array.prototype.slice.call(arguments); 
    var oa = a[0], dp = a.slice(1); 
    for(var i=0,l=oa.length; i<l; i++){ 
    for(var n=0,c=dp.length; n<c; n++){ 
     delete oa[i][dp[n]]; 
    } 
    } 
    return oa; 
} 
var newObjectsArray = deleteProps(objectsArray, 'key1', 'key2'); 
+1

'TypeError: Объект # не имеет метода 'slice''. Спасибо, но есть проблема, она не может сращиваться – Lazy

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