2009-09-06 33 views
61

Vớilàm thế nào để loại bỏ giá trị + phím từ băm trong javascript

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key2'] = { Name: 'Object 2' }; 
myHash['key3'] = { Name: 'Object 3' }; 

làm thế nào để loại bỏ key2, và object 2 từ băm, mà nó kết thúc trong tình trạng như thể tôi đã làm:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key3'] = { Name: 'Object 3' }; 

xóa không làm những gì tôi muốn;

delete myHash['key2'] 

chỉ đơn giản là mang lại cho tôi điều này:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myhash['key2'] = null; 
myHash['key3'] = { Name: 'Object 3' }; 

các tài liệu duy nhất tôi có thể tìm thấy trên spliceslice thỏa thuận với indexers số nguyên, mà tôi không có.

Chỉnh sửa: Tôi cũng không biết rằng 'khóa2' nhất thiết phải là ở vị trí [1]

CẬP NHẬT

OK cá trích đỏ nhẹ, xóa dường như để làm những gì tôi muốn trên bề mặt, Tuy nhiên, im sử dụng json2.js để stringify đối tượng của tôi để json cho đẩy lại cho máy chủ,

sau ive xóa, myHash được đăng như:

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ] 

Đây có phải là lỗi trong json2.js không? hoặc là một cái gì đó im làm sai với xóa?

Cảm ơn

+3

Điều bạn đang làm là thêm thuộc tính vào đối tượng, khác với việc thêm thành phần vào mảng/băm. Bạn đang tìm cách xóa một thuộc tính, nhiều hơn hoặc ít hơn. Hãy thử xóa myHash.key1, như đã đề cập trong các nhận xét khác. –

+2

Nếu đó là một hashtable, bạn nên sử dụng 'var myHash = new Object()' thay vì 'var myHash = new Array()'. – cprcrack

Trả lời

150

Bạn đang tìm kiếm delete:

delete myhash['key2'] 

Xem tùy chọn Core Javascript Guide

+1

Tôi nghĩ rằng điều này là chính xác, đó là lý do tại sao tôi đã thử nó ở nơi đầu tiên. Nó làm _seem_ để làm việc, vấn đề của tôi thực sự nằm trong Json.stringify, cập nhật lỗi câu hỏi –

+6

sử dụng hàm ghép nối thay thế. Xóa bỏ một lỗ trong mảng. –

+0

Tác phẩm này dành cho tôi. Cảm ơn! –

1

khác có thể John Resig remove method này. có thể phù hợp hơn với những gì bạn cần. nếu bạn biết chỉ mục trong mảng.

+2

cũng không có chỉ mục là chính xác những gì câu hỏi tiểu bang –

+0

Hey @AndrewBullock Tôi có một truy vấn tôi nhận được mảng JSON Ví dụ: [{\ "Mã quốc gia \": \ "DE \", \ "đếm \": \ "3 \ "}] nhưng tôi muốn có được như [{" DE ":" 3 "}] như thế này nhưng tôi không nhận được kết quả này Xin hãy giúp tôi –

11

Tại sao bạn sử dụng new Array(); cho hàm băm? Bạn cần sử dụng new Object() để thay thế.

Và tôi nghĩ bạn sẽ có được những gì bạn muốn.

+4

Tôi không thích gì cả. Tôi thích var myHash = []; – Nosredna

+10

Hoặc trong trường hợp này, myHash = {}; :-) – Nosredna

+0

@Nosredna hoàn toàn đồng ý :) –

6

Bạn nói rằng bạn không nhất thiết phải biết rằng 'key2' ở vị trí [1]. Vâng, nó không phải. Vị trí 1 sẽ bị chiếm bởi myHash [1].

Bạn đang lạm dụng các mảng JavaScript, trong đó (như chức năng) cho phép băm khóa/giá trị. Mặc dù JavaScript cho phép nó, nó không cung cấp cho bạn cơ sở để đối phó với nó, như một ngôn ngữ được thiết kế cho mảng kết hợp sẽ. Phương thức mảng của JavaScript chỉ làm việc với các thuộc tính được đánh số.

Điều đầu tiên bạn nên làm là chuyển sang đối tượng thay vì mảng. Bạn không có lý do chính đáng để sử dụng một mảng ở đây chứ không phải là một đối tượng, vì vậy đừng làm điều đó. Nếu bạn muốn sử dụng một mảng, chỉ cần đánh số các phần tử và từ bỏ ý tưởng băm. Mục đích của một mảng là giữ thông tin có thể được lập chỉ mục thành số.

Bạn có thể, tất nhiên, đặt một băm (đối tượng) vào một mảng nếu bạn muốn.

myhash[1]={"key1","brightOrangeMonkey"}; 
+0

bạn là chính xác, cảm ơn :) xem câu trả lời của tôi –

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