2013-01-30 24 views
14

Tôi khá mới với JavaScript và không chắc chắn điều này có thể thực hiện được nhưng về cơ bản tôi muốn lấy một đối tượng và chuyển đổi nó thành một chuỗi các chuỗi ở định dạng ; array[0] = 'prop1=value1'Chuyển đổi các thuộc tính và giá trị của đối tượng thành mảng các cặp khóa giá trị

Lý do đằng sau điều này là tôi có người dùng nhập danh sách các cặp k = v vào một biểu mẫu, sau đó nó được viết dưới dạng đối tượng trong một đốm màu json. Đi từ giá trị khóa csl đến đối tượng json là đơn giản, bây giờ tôi cần phải quay trở lại theo cách khác (tôi đã nhận được JSON thông qua một cuộc gọi ajax và muốn điền một mẫu trống). Điều này có thể trong JavaScript? Nếu không xin vui lòng cung cấp một công việc hợp lý xung quanh.

Mã mẫu;

Đối tượng trong trình gỡ lỗi;

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

Tôi cần phải chuyển đổi thành;

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

Về cơ bản tôi cần một cái gì đó như thế này (pseudo code)

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

Có lý do nào khiến bạn không sử dụng ['JSON.parse()'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ JSON/phân tích cú pháp) và ['JSON.stringify()'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify)? – NullUserException

+0

"Đi từ khóa giá trị csl" - CSL là gì? – stevebot

+0

Trước khi điều này xảy ra, tôi đã sử dụng 'JSON.parse()' để lấy một đối tượng từ json. Vấn đề là hiển thị tên thuộc tính chứ không chỉ giá trị của chúng. – evanmcdonnal

Trả lời

32

Có lẽ bạn đang tìm kiếm cái gì đó dọc theo dòng của

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

Chú ý rằng nó sẽ làm việc tốt nếu giá trị của bạn là chuỗi; nếu chúng là các đối tượng phức tạp thì bạn sẽ cần thêm nhiều mã hơn.

Hoặc bạn chỉ có thể sử dụng jQuery.param, mà làm những gì bạn muốn, ngay cả đối với các loại phức tạp (mặc dù nó sử dụng các nhân vật & như tách, thay vì dấu phẩy.

+0

Nếu bạn muốn chuyển đổi đối tượng của mình thành truy vấn yêu cầu thì sử dụng 'jQuery.params' luôn được đề xuất qua lỗi, mã tùy chỉnh. –

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

Bạn có thể sau đó join mảng cho chuỗi cuối cùng của bạn.

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" 

Chú ý thứ tự không được bảo đảm .

+0

Nó được đảm bảo .... chỉ theo thứ tự bảng chữ cái thay vì đặt hàng. – GoldBishop

+0

@GoldBishop Không, [không phải] (http://stackoverflow.com/q/30076219/1048572). Nếu bạn muốn thứ tự chữ cái, hãy làm 'array.sort(). Join (',')'. – Bergi

+0

Có thể lập trường của nó, nhưng nó khá đáng tin cậy đối với tôi mà không sử dụng sắp xếp. Nhưng tôi cũng thường đi từ Object -> Array -> String hoặc chỉ Object -> String. – 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

Trong ES6 bạn có thể sử dụng Object.entries({object1:1,object2:2});. Kết quả là: [["object1",1],["object2",2]]