2013-03-16 39 views
33

Tôi có một mảng json mà trông giống như sau:Hủy bỏ phần tử từ JSON Object

{ 
    "id": 1, 
    "children": [ 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }] 
} 

Tôi muốn có một chức năng mà loại bỏ các yếu tố trong đó có các "con" trống rỗng. Tôi làm nó như thế nào? Tôi không yêu cầu cho câu trả lời, chỉ gợi ý

+0

Cẩn thận: những '= 'dấu hiệu gợi ý tại JSON không hợp lệ – rjz

+2

@magritte dừng lại với câu hỏi không cần thiết này. anh ta nói anh ta đang xin ý kiến. không phải là câu trả lời/ –

+0

@rjz, có những = nên là: ... –

Trả lời

51

Để lặp qua các phím của một đối tượng, sử dụng một vòng lặp for .. in:

for (var key in json_obj) { 
    if (json_obj.hasOwnProperty(key)) { 
     // do something with `key' 
    } 
} 

Để kiểm tra tất cả các yếu tố cho trẻ em trống rỗng, bạn có thể sử dụng một cách tiếp cận đệ quy: lặp qua tất cả các yếu tố và kiểm tra đệ quy con cái của chúng.

Loại bỏ thuộc tính của một đối tượng có thể được thực hiện bằng cách sử dụng các từ khóa delete:

var someObj = { 
    "one": 123, 
    "two": 345 
}; 
var key = "one"; 
delete someObj[key]; 
console.log(someObj); // prints { "two": 345 } 

Tài liệu:

+9

+1 ... Tôi đã viết mã Javascript trong nhiều năm và tôi thậm chí không biết toán tử [delete] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete) tồn tại ?! – Emissary

+1

Tôi nghĩ anh ta nên sử dụng phương thức splice() thay vì xóa vì các em được giữ trong một mảng? – magritte

+0

@magritte Ông đã nghe cả mảng và đối tượng. Tôi đang chờ đợi một số làm rõ, nhưng có, nếu có mảng ông có thể sử dụng 'splice' để loại bỏ các yếu tố hoặc sử dụng [' lọc'] (https://developer.mozilla.org/en-US/docs/JavaScript/ Tham chiếu/Global_Objects/Array/filter) để lặp lại và xóa nội dung. – Lekensteyn

1

JSfiddle

function deleteEmpty(obj){ 
     for(var k in obj) 
     if(k == "children"){ 
      if(obj[k]){ 
        deleteEmpty(obj[k]); 
      }else{ 
        delete obj.children; 
       } 
     } 
    } 

for(var i=0; i< a.children.length; i++){ 
deleteEmpty(a.children[i]) 
}