Как удалить пустые свойства из объекта JavaScript с несколькими глубинами? - PullRequest
2 голосов
/ 23 февраля 2011

У меня есть этот объект JS:

var test = {"code_operateur":[""],"cp_cult":["",""],"annee":["2011"],"ca_cult":[""]}

Когда я использую эту функцию:

for (i in test) {  
   if ( test[i] == "" || test[i] === null ) {  
       delete test[i];  
    }  
}

Я получаю:

{"cp_cult":["",""],"annee":["2011"]}

Хорошо, неплохо, но я бы хотел удалить пустое свойство "cp_cult" (которое является массивом, а не строкой, как другие).

Примечание: я не хочу удалять ключ вручную!

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Похоже, вы задаете 2 вопроса здесь.

  1. Как мне удалить свойство объекта; и
  2. Как я могу определить, является ли объект массивом?

Вы можете удалить свойство объекта с помощью оператора delete.

delete test.cp_cult;

В JavaScript массивы являются объектами, что означает, что typeof([]) бесполезно возвращает object. Обычно люди обходят это, используя функцию в каркасе (dojo.isArray или что-то подобное) или применяя собственный метод, который определяет, является ли объект массивом.

Не существует 100% гарантированного способа определить, является ли объект массивом. Большинство людей просто проверяют, есть ли у него некоторые методы / свойства массива length, push, pop, shift, unshift и т. Д.

0 голосов
/ 23 февраля 2011

Попробуйте:

function isEmpty(thingy) {
 for(var k in thingy){
  if(thingy[k]) {
   return false;
  }
 }
 return true;
}

for(i in test) {
 if ( test[i] == "" || test[i] === null || (typeof test[i] == "object" && isEmpty(test[i])) ) {
  delete test[i];
 }
}

Однако, в зависимости от сложности объекта, вам потребуются более сложные алгоритмы.Например, если массив может содержать другой массив пустых строк (или даже больше уровней), и он должен быть удален, вам также необходимо проверить это.

РЕДАКТИРОВАТЬ: Пытаясь сделать что-то, чтобы удовлетворить ваши потребности, пожалуйста, посмотрите на: http://jsfiddle.net/jVHNe/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...