数値キーを持つJavaScriptオブジェクトを配列に変換する


175

このようなオブジェクトがサーバーからのJSON応答として返されます。

{"0":"1","1":"2","2":"3","3":"4"}

これを次のようなJavaScript配列に変換したいと思います。

["1","2","3","4"]

これを行う最良の方法はありますか?私が読んでいるところはどこでも、人々はループを使用して複雑なロジックを使用しています。これを行う別の方法はありますか?



8
ちなみに、単なるループは複雑なロジックではありません:))
moonwave99

回答:


328

jQueryのそれは実際には非常に簡単です $.map

var arr = $.map(obj, function(el) { return el });

FIDDLE

jQueryがなくてもほぼ同じくらい簡単です。キーを配列に変換してから、値をマッピングして戻します。 Array.map

var arr = Object.keys(obj).map(function(k) { return obj[k] });

FIDDLE

これは、JavaScriptオブジェクトとして既に解析されており、実際には文字列形式であるJSONではないことを前提としています。その場合、実行JSON.parseも必要になります。

ES2015にObject.valuesは救出があり、これは簡単です

var arr = Object.values(obj);

1
@adeneo Sir htisメソッドについて説明してください。
Nikhil Agrawal 2014年

1
@adeneo別名Mr. Burns ...この迅速な解決策をありがとう
ゼイムサスズビルブリス2015年

1
@NikhilAgrawalここでのトリックは、オブジェクトのキー(=独自の列挙可能なプロパティ)を配列として返すObject.keys()を使用することです。次に、array.mapを使用して、各キーを新しい配列の対応する値に置き換えます。
アントワーヌ2015年

1
これは答えですが、あまり友好的ではありません。
sheriffderek

1
質問は明確ではありませんでしたが、オブジェクトのキーは(0,1,2,3)であるという性質上、配列のインデックスであると想定していました。このメソッドは配列の順序を保証するものではないことを人々が知っておく必要があることを指摘するだけです。キーがインデックスの場合、配列が正しい順序で構築されるように、キーを明示的に順序付ける必要があります。
leejt489

107
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]);
}

これがあなたが求めているものであることを願っています!


ありがとう。本当にそれが必要でした。誰かが
大量

ありがとうございました!完璧な答え。
Vincent、

必要なものに非常に近いおかげで:for(var x in data){arr [x] = data [x]; }
Andrew

24

あなたは単にそれを好きです

var data = {
    "0": "1",
    "1": "2",
    "2": "3",
    "3": "4"
};
var arr = [];
for (var prop in data) {
    arr.push(data[prop]);
}
console.log(arr);

デモ


20

「JSONオブジェクト」のようなものは何もありません-JSONはシリアル化表記です。

JavaScriptオブジェクトJavaScript配列に変換したい場合は、独自のループを作成するか(それほど複雑ではありません!)、またはunderscore.js _.toArray()メソッドに依存します

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();

1
ありがとう-魅力のように動作します。しかし、内部オブジェクト(オブジェクト内のオブジェクト)でも同じようにする方法は?内部オブジェクトは、ルートレベルで配列のフラットメンバーになる必要もあります(たとえば、datatables.netなどに渡すことができるようにするため)
Gopalakrishna Palem

+1:「JSONオブジェクトのようなものは何もありません-JSONはシリアル化表記です。」-完全に理解する前に何回これを聞いたのか信じられません。
radbyx 2017年

9

ここで難しいことはありません。オブジェクト要素をループして配列に割り当てます

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
   arr.push(obj[elem]);
}

http://jsfiddle.net/Qq2aM/


9

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];
  }
}

console.log(array)

デモ


4

これを試して:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
    newArr.push([obj.value]);
});

あなたの解決策はここに提示されたすべての中で最も遅いものになるでしょう...ビジネスコードには
不利

3
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

2

生のJavaScriptを使用して、次のように想定します。

var j = {0: "1", 1: "2", 2: "3", 3: "4"};

あなたは値を得ることができます:

Object.keys(j).map(function(_) { return j[_]; })

出力:

["1", "2", "3", "4"]

2

ここで何が欠けているのかわかりませんが、以下のコードを試してみればうまくいきます。ここで何か不足していますか?

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

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配列に変換するためにも機能します。

このページの他のメソッドは、php jsonでエンコードされた文字列を操作するときに、ここで言及しているメソッドを除いて、完全に機能するようには見えませんでした。


1

ここでは、オブジェクトの配列を得ることができる方法の例です、配列を並べ替えます。

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

0

これが最良の解決策です。私はそう思う。

Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})

0
      var data = [];

      data  = {{ jdata|safe }}; //parse through js
      var i = 0 ;
      for (i=0;i<data.length;i++){
         data[i] = data[i].value;
      }

2
このコードスニペットをありがとうございます。このコードスニペットは、限られた、即時の助けを提供する可能性があります。適切な説明が大幅に長期的な価値を向上させるだろう示すことによって、なぜこれが問題に良い解決策であり、他の、同様の質問を将来の読者にそれがより便利になるだろう。答えを編集して、仮定を含めて説明を追加してください。
Mogsdad 2017

0

PHPを使用して、jsonオブジェクトを配列と文字列に変換できます。

$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++;
}

問題は、PHPではなくjavascriptについてです。
チャールズテイラー

-1

Object.assign()空の配列リテラルを[]として使用できますtarget

const input = {
  "0": "1",
  "1": "2",
  "2": "3",
  "3": "4"
}

const output = Object.assign([], input)

console.log(output)

あなたがチェックした場合はポリフィルをObject.assign(target, ...sources)単にコピーからすべて列挙独自のプロパティsourceターゲット・オブジェクトへのオブジェクト。targetが配列の場合、数値キーを配列リテラルに追加し、そのtarget配列オブジェクトを返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.