कैसे कुंजी और मूल्य दोनों को Jquery में एक ऐरे में धकेलें


88

मैं RSS फ़ीड पढ़ रहा हूं और दोनों शीर्षक और लिंक को Jquery में एक ऐरे में धकेल रहा हूं ।

मैंने जो किया है

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});
                });                      
            });

और मैं उस सरणी को फिर से उपयोग करके पढ़ रहा हूं

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

लेकिन यह मुझे आउटपुट के रूप में दे रहा है

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

इस तरह ...

मैं टाइल और लिंक दोनों को जोड़ी के रूप में कैसे प्राप्त कर सकता हूं ( कुंजी के रूप में शीर्षक और मूल्य के रूप में लिंक )

जवाबों:


188

जावास्क्रिप्ट सरणियों में कोई कुंजी नहीं है। उस उद्देश्य के लिए वस्तुओं का उपयोग करें।

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 );
});

जावास्क्रिप्ट में, ऑब्जेक्ट साहचर्य सरणियों की भूमिका को पूरा करते हैं। ध्यान रखें कि वस्तुओं को परिभाषित नहीं किया जाता है जब उन्हें पुनरावृत्त करते हुए "क्रमबद्ध करें" (नीचे देखें)।

हालाँकि , आपके मामले में यह वास्तव में मेरे लिए स्पष्ट नहीं है कि आप मूल वस्तु ( data.news) से डेटा अंतरण क्यों करते हैं । आप बस उस ऑब्जेक्ट के संदर्भ में पास क्यों नहीं करते ?


आप पूर्वनिर्धारित पुनरावृत्ति और कुंजी / मूल्य व्यवहार को प्राप्त करने के लिए वस्तुओं और सरणियों को जोड़ सकते हैं :

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

यह कोड

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

ऐसा नहीं है जो आपको लगता है कि यह करता है। जिस चीज को धक्का दिया जाता है वह "शीर्षक" नाम के एकल सदस्य के साथ एक नई वस्तु है और linkमूल्य के रूप में ... वास्तविक titleमूल्य का उपयोग नहीं किया जाता है। किसी वस्तु को दो क्षेत्रों से बचाने के लिए आपको कुछ करना होगा

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

या हालिया जावास्क्रिप्ट अग्रिमों के साथ आप शॉर्टकट का उपयोग कर सकते हैं

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

एक अजगर टपल के लिए निकटतम चीज इसके बजाय होगी

arr.push([title, link]);

एक बार जब आप अपनी वस्तुओं या सरणियों है arrसरणी आप मान या तो के रूप में प्राप्त कर सकते हैं value.titleऔर value.linkधक्का दिया सरणी संस्करण के मामले में, या, के रूप में value[0], value[1]


17
arr[title] = link;

आप सरणी में धकेल नहीं रहे हैं , आप तत्व titleको मान की कुंजी के साथ सेट कर रहे हैं link। जैसे कि आपका ऐरे ऑब्जेक्ट होना चाहिए।


17

मुझे लगता है कि आपको किसी ऑब्जेक्ट को परिभाषित करने और फिर सरणी में पुश करने की आवश्यकता है

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

2

आप इसका मतलब हो सकता है:

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['        ']);

आप किसी ऑब्जेक्ट के लिए एक गणना ({})[0] = 'txt';कर सकते हैं जैसे: और आप एक ऐरे के लिए एक कुंजी सेट कर सकते हैं जैसे:([])['myKey'] = 'myVal';

उम्मीद है की यह मदद करेगा :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.