2013-01-30 15 views
14

Jestem całkiem nowym użytkownikiem JavaScript i nie jestem pewien, czy jest to możliwe, ale zasadniczo chciałbym wziąć obiekt i przekonwertować go na tablicę ciągów w formacie ; array[0] = 'prop1=value1'Konwersja właściwości i wartości obiektu do tablicy par wartości klucza

Powodem tego jest to, że mam użytkownika wprowadzić listę par k = v do formularza, później jest napisany jako obiekt w json blob. Przechodzenie od wartości klucza csl do obiektu json było proste, teraz muszę wrócić w drugą stronę (otrzymałem JSON za pośrednictwem wywołania ajax i chcę wypełnić pusty formularz). Czy to możliwe w JavaScript? Jeśli nie, zaproponuj rozsądną pracę.

Przykładowy kod;

Obiekt w debugerze;

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

Muszę to przekonwertować;

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

Zasadniczo muszę coś tak (pseudo kod)

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

Czy istnieje jakiś powód, dla którego nie używasz ['JSON.parse()'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ JSON/parse) i ['JSON.stringify()'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify)? – NullUserException

+0

"Przechodzenie z wartości klucza csl" - Co to jest CSL? – stevebot

+0

Zanim to nastąpi, użyłem 'JSON.parse()', aby uzyskać obiekt z json. Problem polega na wyświetlaniu nazw właściwości, a nie tylko ich wartości. – evanmcdonnal

Odpowiedz

32

Pewnie szukasz czegoś wzdłuż linii

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

Zauważ, że będzie dobrze, jeśli wartości są ciągi; jeśli są złożone, to musisz dodać więcej kodu.

Albo można po prostu użyć jQuery.param, który robi to, co chcesz, nawet dla typów złożonych (chociaż nie używa znaku & jako separatora zamiast przecinka.

+0

Jeśli chcesz przekonwertować swój obiekt na zapytanie, to używanie 'jQuery.params' jest zawsze zalecane w przypadku podatnego na błędy, niestandardowego kodu. –

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

można następnie join tablica dla ostatecznego ciąg.

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" 

Wskazówka kolejność nie jest gwarantowana .

+0

Jest to gwarantowane .... w porządku alfabetycznym zamiast złożonego zamówienia. – GoldBishop

+0

@GoldBishop Nope, [to nie jest] (http://stackoverflow.com/q/30076219/1048572). Jeśli chcesz mieć kolejność alfabetyczną, wykonaj 'array.sort(). Join (',')'. – Bergi

+0

Może to się stało, ale dla mnie było całkiem niezawodny bez użycia sortowania. Ale zwykle również przechodzę z Object -> Array -> String lub po prostu 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

W ES6 można użyć Object.entries({object1:1,object2:2});. Wynik: [["object1",1],["object2",2]]

Powiązane problemy