2013-01-30 12 views
14

मैं जावास्क्रिप्ट के लिए काफी नया हूं और मुझे यकीन नहीं है कि ऐसा करना संभव है लेकिन मूल रूप से मैं एक ऑब्जेक्ट लेना चाहता हूं और प्रारूप में तारों की सरणी में परिवर्तित करना चाहता हूं ; array[0] = 'prop1=value1'कुंजी मान जोड़े के सरणी के लिए ऑब्जेक्ट की गुणों और मानों को कनवर्ट करें

इसके पीछे तर्क यह है कि मैं उपयोगकर्ता को के = वी जोड़े की एक सूची में एक फॉर्म में प्रवेश कर रहा हूं, बाद में इसे एक जेसन ब्लॉब के भीतर एक वस्तु के रूप में लिखा गया है। मुख्य मूल्य सीएसएल से जेसन ऑब्जेक्ट में जाकर सरल था, अब मुझे दूसरी तरफ वापस जाना होगा (मुझे एक AJAX कॉल के माध्यम से JSON प्राप्त हुआ है और एक रिक्त रूप पॉप्युलेट करना चाहते हैं)। जावास्क्रिप्ट में यह संभव है? यदि नहीं, तो कृपया एक उचित काम की पेशकश करें।

नमूना कोड;

डीबगर में ऑब्जेक्ट;

Object 
     private_key: "private-key" 
     public_key: "public-key" 

मुझे इसे परिवर्तित करने की आवश्यकता है;

"private_key=private-key,public_key=public-key" 

मूल रूप से मैं इस (छद्म कोड) की तरह कुछ

var outputString = ''; 
foreach (prop in obj) 
{ 
    outputString = outputString + prop.tostring() + '=' + prop.value + ','; 
} 
+0

क्या कोई कारण है कि आप ['JSON.parse()'] का उपयोग नहीं कर रहे हैं (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ जेएसओएन/पार्स) और ['JSON.stringify()'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify)? – NullUserException

+0

"कुंजी मान सीएसएल से जा रहा है" - सीएसएल क्या है? – stevebot

+0

ऐसा होने से पहले मैंने जेसन से ऑब्जेक्ट प्राप्त करने के लिए 'JSON.parse() 'का उपयोग किया है। समस्या संपत्ति के नाम प्रदर्शित करने में है, न केवल उनके मूल्यों। – evanmcdonnal

उत्तर

32

आप शायद के

var obj = {value1: 'prop1', value2: 'prop2', value3: 'prop3'}; 
var arr = []; 
for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     arr.push(key + '=' + obj[key]); 
    } 
}; 
var result = arr.join(','); 
alert(result); 

सूचना है कि यह अगर अपने मूल्यों तार कर रहे हैं तरीके से कार्य करेंगे पंक्तियों के साथ कुछ के लिए देख रहे हों; यदि वे जटिल वस्तुएं हैं तो आपको अधिक कोड जोड़ना होगा।

या फिर आप jQuery.param, जो आप क्या चाहते हैं, यहां तक ​​कि जटिल प्रकार के लिए (हालांकि यह, विभाजक के रूप में & चरित्र का उपयोग करता अल्पविराम के बजाय करता है का उपयोग कर सकते हैं।

+0

यदि आप अपनी ऑब्जेक्ट को अनुरोध क्वेरी में कनवर्ट करना चाहते हैं तो 'jQuery.params' का उपयोग करके हमेशा त्रुटि प्रवण, कस्टम कोड पर अनुशंसा की जाती है। –

3
var array = []; 
for (k in o) 
{ 
    if (o.hasOwnProperty(k)) 
    { 
     array.push(k+"="+o[k]); 
    } 
} 

जरूरत है आप कर सकते हैं तो join अपने अंतिम स्ट्रिंग के लिए सरणी।

4
var object = { 
    private_key: "private-key", 
    public_key: "public-key" 
}; 

var array = []; 
for (var prop in object) 
    array.push(prop + "=" + object[prop]); 
return array.join(','); // "private_key=private-key,public_key=public-key" 

सूचना क्रम इसकी गारंटी नहीं है ।

+0

इसकी गारंटी है .... बस क्रमबद्ध क्रम के बजाय वर्णमाला क्रम में। – GoldBishop

+0

@ गॉल्ड बिशप नोप, [यह नहीं है] (http://stackoverflow.com/q/30076219/1048572)। यदि आप वर्णमाला क्रम चाहते हैं, तो 'array.sort() करें। (', ')' शामिल हों। – Bergi

+0

शायद यह घटना-रुख हो सकता है, लेकिन यह सॉर्ट का उपयोग किए बिना मेरे लिए बहुत विश्वसनीय रहा है। लेकिन मैं आमतौर पर ऑब्जेक्ट -> ऐरे -> स्ट्रिंग या ऑब्जेक्ट -> स्ट्रिंग से भी जाता हूं। – GoldBishop

1

obj = { 
 
    private_key: "private-key", 
 
    public_key: "public-key" 
 
} 
 

 
str = JSON.stringify(obj).replace(/[{}]/g, '').replace(/"/g, '').replace(/:/g, '='); 
 
console.log("Using JSON.stringify:\n", str); 
 

 
str = Object.keys(obj).map((key) => `${key}=${obj[key]}`).join(',') 
 
console.log("Using ES6 keys/map:\n", str); 
 

 
str = jQuery.param(obj).replace(/&/g,','); 
 
console.log("Using jQuery.param:\n", str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

ES6 में आपउपयोग कर सकते हैं। नतीजा यह है: [["object1",1],["object2",2]]

संबंधित मुद्दे