Cách đẩy cả khóa và giá trị vào Mảng trong Jquery


88

Tôi đang đọc nguồn cấp dữ liệu RSS và đẩy cả Tiêu đề và Liên kết vào một Mảng trong Jquery .

Những gì tôi đã làm là

var arr = [];

            $.getJSON("displayjson.php",function(data){
                $.each(data.news, function(i,news){
                    var title = news.title;
                    var link = news.link;
                    arr.push({title : link});
                });                      
            });

Và tôi đang đọc lại mảng đó bằng cách sử dụng

$('#show').click(function(){
                $.each(arr, function(index, value){
                    alert( index +' : '+value);
                });
            });

Nhưng nó mang lại cho tôi đầu ra

1:[Object Object]
2:[Object Object]
3:[Object Object]

như thế này ...

Làm cách nào để tôi có thể lấy cả ôliên kết dưới dạng một cặp ( tiêu đề là khóa và liên kết là giá trị )

Câu trả lời:


188

Không có khóa nào trong mảng JavaScript. Sử dụng các đối tượng cho mục đích đó.

var obj = {};

$.getJSON("displayjson.php",function (data) {
    $.each(data.news, function (i, news) {
        obj[news.title] = news.link;
    });                      
});

// later:
$.each(obj, function (index, value) {
    alert( index + ' : ' + value );
});

Trong JavaScript, các đối tượng hoàn thành vai trò của mảng kết hợp. Lưu ý rằng các đối tượng không có "thứ tự sắp xếp" được xác định khi lặp chúng (xem bên dưới).

Tuy nhiên , trong trường hợp của bạn, tôi không thực sự rõ ràng tại sao bạn lại chuyển dữ liệu từ đối tượng ban đầu ( data.news). Tại sao bạn không chỉ đơn giản là vượt qua một tham chiếu đến đối tượng xung quanh?


Bạn có thể kết hợp các đối tượng và mảng để đạt được sự lặp lại có thể dự đoán được hành vi khóa / giá trị:

var arr = [];

$.getJSON("displayjson.php",function (data) {
    $.each(data.news, function (i, news) {
        arr.push({
            title: news.title, 
            link:  news.link
        });
    });                      
});

// later:
$.each(arr, function (index, value) {
    alert( value.title + ' : ' + value.link );
});

30

Mã này

var title = news.title;
var link = news.link;
arr.push({title : link});

không làm những gì bạn nghĩ. Thứ được đẩy là một đối tượng mới với một thành viên duy nhất có tên là "title" và với linkgiá trị là ... titlegiá trị thực không được sử dụng. Để lưu một đối tượng có hai trường, bạn phải làm điều gì đó như

arr.push({title:title, link:link});

hoặc với những tiến bộ Javascript gần đây, bạn có thể sử dụng phím tắt

arr.push({title, link}); // Note: comma "," and not colon ":"

Thay vào đó, thứ gần nhất với một tuple python sẽ là

arr.push([title, link]);

Một khi bạn có đối tượng hoặc mảng của bạn trong arrmảng bạn có thể nhận các giá trị hoặc là value.titlevalue.linkhay, trong trường hợp của phiên bản mảng đẩy, như value[0], value[1].


17
arr[title] = link;

Bạn không đẩy vào mảng, bạn đang đặt phần tử có khóa titlethành giá trị link. Như vậy mảng của bạn phải là một đối tượng.


17

Tôi nghĩ bạn cần xác định một đối tượng và sau đó đẩy vào mảng

var obj = {};
obj[name] = val;
ary.push(obj);

2

Ý bạn có thể là:

var unEnumeratedArray = [];
var wtfObject = {
                 key    : 'val', 
                 0      : (undefined = 'Look, I\'m defined'),
                 'new'  : 'keyword', 
                 '{!}'  : 'use bracket syntax',
                 '        ': '8 spaces'
                };

for(var key in wtfObject){
    unEnumeratedArray[key] = wtfObject[key];
}
console.log('HAS KEYS PER VALUE NOW:', unEnumeratedArray, unEnumeratedArray[0], 
             unEnumeratedArray.key, unEnumeratedArray['new'], 
             unEnumeratedArray['{!}'], unEnumeratedArray['        ']);

Bạn có thể đặt một kiểu liệt kê cho một Đối tượng như: ({})[0] = 'txt';và bạn có thể đặt khóa cho một Mảng như:([])['myKey'] = 'myVal';

Hi vọng điêu nay co ich :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.