このようなオブジェクトがサーバーからのJSONレスポンスとして返されます。
{"0":"1","1":"2","2":"3","3":"4"}
これをJavaScriptの配列に変換したいのですが。
["1","2","3","4"]
これを行うための最善の方法はありますか?私が読んでいるところはどこでも、人々はループを使って複雑な論理を使っています。それでこれを行うための代替方法はありますか?
実際にはjQueryの $.map
を使うととても簡単です。
var arr = $.map(obj, function(el) { return el });
jQueryを使わなくても、キーを配列に変換してから Array.map
を使って値をマッピングし直すのとほぼ同じくらい簡単です。
var arr = Object.keys(obj).map(function(k) { return obj[k] });
これは、すでにJavaScriptオブジェクトとして解析されていて、実際には文字列形式のJSONではないと想定しています。その場合は、JSON.parse
による実行も必要になります。
ES2015では Object.values
が助けになりました。
var arr = Object.values(obj);
var json = '{"0":"1","1":"2","2":"3","3":"4"}';
var parsed = JSON.parse(json);
var arr = [];
for(var x in parsed){
arr.Push(parsed[x]);
}
これがあなたが求めているものであることを願っています!
あなたは単にそれを好きです
var data = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
};
var arr = [];
for (var prop in data) {
arr.Push(data[prop]);
}
console.log(arr);
「JSONオブジェクト」のようなものは何もありません - JSONは直列化表記です。
javascriptオブジェクト を javascript配列 に変換する場合は、独自のループを作成するか(それほど複雑ではありません)、または underscore.jsを使用します。_.toArray()
メソッド:
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();
ここで難しいことは何もない。オブジェクト要素をループしてそれらを配列に割り当てます。
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
arr.Push(obj[elem]);
}
var JsonObj= {"0":"1","1":"2","2":"3","3":"4"};
var array = [];
for(var i in JsonObj) {
if(JsonObj.hasOwnProperty(i) && !isNaN(+i)) {
array[+i] = JsonObj[i];
}
}
これを試して:
var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
newArr.Push([obj.value]);
});
私がここで見逃しているものがわからないが、単に以下のコードを試すことは仕事をする。ここに何か足りない?
https://jsfiddle.net/vatsalpande/w3ew5bhq/ /
$(document).ready(function(){
var json = {
"code" :"1",
"data" : {
"0" : {"id":"1","score":"44"},
"1" : {"id":"1","score":"44"}
}
};
createUpdatedJson();
function createUpdatedJson(){
var updatedJson = json;
updatedJson.data = [updatedJson.data];
$('#jsondata').html(JSON.stringify(updatedJson));
console.log(JSON.stringify(updatedJson));
}
})
生のJavaScriptを使用して、あなたが持っていると仮定します:
var j = {0: "1", 1: "2", 2: "3", 3: "4"};
あなたは値を得ることができます:
Object.keys(j).map(function(_) { return j[_]; })
出力:
["1", "2", "3", "4"]
var obj = {"0":"1","1":"2","2":"3","3":"4"};
var vals = Object.values(obj);
console.log(vals); //["1", "2", "3", "4"]
質問に対する別の選択肢
var vals = Object.values(JSON.parse(obj)); //where json needs to be parsed
これは、オブジェクトの配列 と を取得してから配列をソートする方法の例です。
function osort(obj)
{ // map the object to an array [key, obj[key]]
return Object.keys(obj).map(function(key) { return [key, obj[key]] }).sort(
function (keya, keyb)
{ // sort(from largest to smallest)
return keyb[1] - keya[1];
}
);
}
次のような値があるとします。
var obj = {"0":"1","1":"2","2":"3","3":"4"};
それでは、次のようにしてこれをJavaScriptの配列に変換できます。
var arr = [];
json = JSON.stringify(eval('(' + obj + ')')); //convert to json string
arr = $.parseJSON(json); //convert to javascript array
これはjsonを多次元のjavascript配列に変換するのにも有効です。
私がここで言及している方法を除いて、このページの他の方法のどれも私のために完全にうまくいくようには思われませんでした。
$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';
$b=json_decode($data);
$i=0;
while($b->{'resultList'}[$i])
{
print_r($b->{'resultList'}[$i]->{'displayName'});
echo "<br />";
$i++;
}
これが最善の解決策です。私はそう思う。
Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})
Object.assign()
を空の配列リテラル[]
とともにtarget
として使用できます。
const input = {
"0": "1",
"1": "2",
"2": "3",
"3": "4"
}
const output = Object.assign([], input)
console.log(output)
polyfill をチェックすると、Object.assign(target, ...sources)
は、列挙可能なすべてのプロパティをsource
オブジェクトからターゲットオブジェクトにコピーするだけです。 target
が配列の場合、数値リテラルを配列リテラルに追加し、そのtarget
配列オブジェクトを返します。
var data = [];
data = {{ jdata|safe }}; //parse through js
var i = 0 ;
for (i=0;i<data.length;i++){
data[i] = data[i].value;
}