मैं एक विशेष जावास्क्रिप्ट समस्या से जूझ रहा हूं और मुझे आशा है कि कोई मदद कर सकता है।

मेरे पास नाम और मूल्य जोड़े की एक सूची है, उदाहरण:

सेब 50
केला 60
अंगूर 70
सेब 40
संतरा 30

मैं इन मानों में से जावास्क्रिप्ट ऑब्जेक्ट बनाने की कोशिश कर रहा हूं:

var myObj = {};

और फिर सूची में सभी मदों के लिए:

myObj[name] = value;

लेकिन जैसा कि आप देख सकते हैं कि कुछ नाम एक से अधिक बार सूची में हैं (उदाहरण के लिए ऐप्पल), इसलिए इस मामले में मैं ऑब्जेक्ट में मान को एक सरणी में परिवर्तित करके और नया जोड़कर ऑब्जेक्ट की उसी संपत्ति में जोड़ना चाहता हूं। सरणी के लिए मान।

तो myObj में शामिल होंगे:

सेब = [50,40]
केला = 60
अंगूर = 70
संतरा = 30

कोई मदद करता है?

धन्यवाद,

ए जे

1
AJ. 27 जून 2011, 15:29
1
सरणी के रूप में सभी मान क्यों नहीं हैं, और उसके बाद नए मानों को धक्का दें, यदि ऑब्जेक्ट उस नाम से मौजूद है?
 – 
Shef
27 जून 2011, 15:34

2 जवाब

सबसे बढ़िया उत्तर

इस कदर:

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

    if (k in obj) {
        if (obj[k] instanceof Array) {
            obj[k].push(values[i]);
        else
            obj[k] = [ obj[k], values[i] ];
    } else
        obj[k] = values[i];
}

यदि कुछ मान पहले से ही सरणियाँ हैं, तो वे चपटे होंगे, नेस्टेड नहीं।

2
Shef 27 जून 2011, 15:55
इसे दो बार, तीन बार दोहराया जा सकता है, और कौन जानता है कि कितनी बार। यह एक सरणी के अंदर एक सरणी का उत्पादन करेगा, किसी अन्य सरणी के अंदर, और इसी तरह ..
 – 
Shef
27 जून 2011, 15:48

मेरे तरीके से।

var MyObj = function(){};
MyObj.prototype.addItem = function(key, val){
    var typ = typeof this[key];
    switch (typ){
        case 'undefined':
            this[key] = val;
            break;
        case 'object':
            this[key].push(val);
            break;
        default:
            this[key] = [this[key], val];
            break;
    }
}

var myObj = new MyObj;

myObj.addItem('Apple', 50);
myObj.addItem('Apple', 70);

console.log(myObj);
2
shotasenga 27 जून 2011, 23:25