2014-07-16 17 views
20

Tôi có đối tượng JSON này dưới đây;Di cặp khóa-giá trị từ đối tượng JSON

[ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
] 

Tôi muốn loại bỏ giá trị khóa YYY khỏi đối tượng json sao cho đối tượng json mới sẽ trông như thế này;

[ 
    { 
     XXX: "2",  
     ZZZ: "4" 
    }, 
    { 
     XXX: "5",  
     ZZZ: "7" 
    }, 
    { 
     XXX: "1",  
     ZZZ: "3" 
    } 
] 

Tôi đã thử delete jsonObject['YYY'] nhưng điều này không chính xác. Làm thế nào điều này có thể được thực hiện trong javascript? Cảm ơn bạn.

+0

Câu hỏi này là thêm về xử lý mảng của các đối tượng hơn bất cứ điều gì để làm với JSON .. một khi bạn có một đối tượng Javascript mà bạn đang thao tác trong bộ nhớ, thực tế là nó bắt đầu cuộc sống vì JSON không thực sự tham gia vào nó. –

+0

thể trùng lặp của [Xóa phần tử từ JSON Object] (http://stackoverflow.com/questions/15451290/remove-element-from-json-object) –

Trả lời

44

Những gì bạn gọi là 'JSON Object' của bạn thực sự là một mảng JSON của đối tượng. Bạn có để lặp qua mỗi và xóa từng thành viên riêng lẻ:

for(var i = 0; i < jsonArr.length; i++) { 
    delete jsonArry[i]['YYY']; 
} 
+0

Cảm ơn. Đã xác minh là câu trả lời đúng. – user781486

+0

nhờ ....... vâng hoàn hảo làm việc –

1

JSONObject là một mảng, vì vậy bạn cần phải tham khảo các phần tử mảng. Hãy thử delete jsonObject[0].YYY

4

lặp qua các giá trị trong mảng, và loại bỏ các giá trị với chính YYY:

var obj = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

for (var i = 0; i < obj.length; i++) { 
    delete obj[i].YYY 
} 
+0

câu trả lời đúng của nó. Nhưng tôi chỉ có thể đánh dấu một câu trả lời là câu trả lời chính xác trên StackOverflow. Lấy làm tiếc. – user781486

1

JSON của bạn là bên trong một mảng , bạn cần truy cập từng phần tử trong mảng và xóa thuộc tính của chúng "YYY" Hoặc sử dụng bản đồ để tạo đối tượng bị giảm, như vậy:

var objs = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

objs = objs.map(function(obj) { 
    return { XXX: obj.XXX, ZZZ: obj.ZZZ }; 
}); 

U hát hàm map. MDN: Array.prototype.map()

+0

câu trả lời của bạn là chính xác giống như Justin –

+0

không có nó thì không. điều này đang sử dụng 'bản đồ' –

+0

Bạn thậm chí không sử dụng bản đồ đúng cách. Vì bạn không tạo một mảng mới, cách thực hành tốt nhất là sử dụng forEach thay vì bản đồ. Ngoài ra, câu trả lời của bạn thực sự không thêm bất cứ điều gì cho câu hỏi. –

1

JSON là văn bản, vì vậy nếu bạn thực sự không có văn bản như:

var s = '[{XXX:"2",YYY:"3",ZZZ:"4"},{XXX:"5",YYY:"6",ZZZ:"7"},{XXX:"1",YYY:"2",ZZZ:"3"}]'; 

sau đó bạn có thể loại bỏ các YYYs sử dụng chuỗi thay thế, một cái gì đó như:

s.replace(/YYY[^,}]+,/g,''); // [{XXX:"2",ZZZ:"4"},{XXX:"5",ZZZ:"7"},{XXX:"1",ZZZ:"3"}] 

Bạn có thể cần tài khoản cho YYY ở đầu hoặc cuối chuỗi. Nếu bạn có một đối tượng được tạo bởi một đối tượng theo nghĩa đen, sau đó sử dụng một trong các câu trả lời khác.

+0

Cách tiếp cận thú vị. Ngay cả khi nó là một chuỗi văn bản tôi sẽ có xu hướng lựa chọn để chuyển đổi đối tượng và sau đó lọc nó với JS chứ không phải là regex. Cần lưu ý rằng JSON hợp lệ cũng yêu cầu các khóa được trích dẫn. Vì vậy, nó sẽ là ''[{" XXX ":" 2 "," YYY ":" 3 "," ZZZ ":" 4 "}, ...]';' và bạn sẽ phải tính đến báo giá đánh dấu là tốt. – nbrooks

0

Một giải pháp mà tránh đột biến mảng ban đầu và sử dụng một tính năng hiện đại hơn (đối tượng còn lại khai thác & destructuring)

const arr = [ 
 
    { 
 
     XXX: "2", 
 
     YYY: "3", 
 
     ZZZ: "4" 
 
    }, 
 
    { 
 
     XXX: "5", 
 
     YYY: "6", 
 
     ZZZ: "7" 
 
    }, 
 
    { 
 
     XXX: "1", 
 
     YYY: "2", 
 
     ZZZ: "3" 
 
    } 
 
] 
 

 
// destructure 'YYY' and return the other props only 
 
const newArray = arr.map(({YYY, ...rest}) => rest) 
 

 
console.log(newArray)

Các vấn đề liên quan