Sayısal tuşlarla JavaScript nesnesini diziye dönüştürme


175

Sunucudan bir JSON yanıtı olarak geri gelen böyle bir nesne var:

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

Bunun gibi bir JavaScript dizisine dönüştürmek istiyorum:

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

Bunu yapmanın en iyi yolu var mı? Nerede okuyorsam insanlar döngüler kullanarak karmaşık mantık kullanıyorlar. Peki bunu yapmanın alternatif yöntemleri var mı?



8
Sadece bir döngü, bu arada karmaşık bir mantık değildir
:)

Yanıtlar:


328

Aslında jQuery's ile çok düz $.map

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

VAKTİNİ BOŞA HARCAMAK

ve jQuery olmadan da aynı derecede kolaydır, anahtarları bir diziye dönüştürür ve ardından değerleri Array.map

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

VAKTİNİ BOŞA HARCAMAK

Bu, zaten bir javascript nesnesi olarak ayrıştırıldığı ve aslında bir dize biçimi olan JSON olmadığı varsayılır, bu durumda bir geçiş JSON.parsede gerekli olacaktır.

ES2015'te Object.valueskurtarmaya var, bu da bir esinti yapıyor

var arr = Object.values(obj);

1
@adeneo Efendim htis yöntemleri hakkında biraz açıklama yapabilir misiniz?
Nikhil Agrawal

1
@ adeneo aka Bay yanıyor ... Bu hızlı çözüm için teşekkürler.
Dzeimsas Zvirblis

1
@NikhilAgrawal Buradaki hile, nesnenin anahtarlarını (= kendi numaralandırılabilir özellikleri) bir dizi olarak döndüren Object.keys () öğesini kullanmaktır . Ardından, her anahtarı yeni bir dizideki karşılık gelen değerle değiştirmek için array.map komutunu kullanabiliriz.
antoine

1
Bu bir cevap, ama çok kolay bir cevap değil.
sheriffderek

1
Soru açık değildi, ama nesnenin anahtarlarının dizinin doğası gereği dizinin indeksleri olduğunu varsaymıştım (0,1,2,3). Sadece insanların bu yöntemin dizideki herhangi bir siparişi garanti etmediğini bilmesi gerektiğini belirtmek; anahtarlar dizin ise, dizinin doğru sırayla oluşturulması için bunları açıkça sipariş etmeniz gerekir.
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]);
}

Umarım peşinde olursun!


Teşekkürler. buna gerçekten ihtiyaç vardı. Birisi üzerine bir şey inşa etmek
gerekinceye

Teşekkür ederim! Mükemmel cevap.
Vincent

çok ihtiyacım olana çok yakın teşekkürler: for (data x var) {arr [x] = data [x]; }
Andrew

24

Basitçe böyle yap

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

DEMO


20

"JSON nesnesi" gibi bir şey yoktur - JSON bir serileştirme gösterimidir.

Javascript nesnenizi bir javascript dizisine dönüştürmek istiyorsanız , ya kendi döngünüzü [bu karmaşık olmaz!] Yazarsınız ya da underscore.js _.toArray() yöntemine güvenirsiniz :

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

1
Teşekkürler - çekicilik gibi çalışır. Ancak iç nesneler için de aynı şeyi nasıl yapmalı (nesneler içindeki nesneler)? İç nesneler de kök düzeyinde dizinin düz üyeleri haline gelmelidir (böylece datatables.net'e geçilebilirler)
Gopalakrishna Palem

+1: "" JSON nesnesi "gibi bir şey yoktur - JSON bir serileştirme gösterimidir." - Tam olarak anlamadan önce bunu kaç kez duymak zorunda olduğuma inanamıyorum.
radbyx

9

Burada zor bir şey yok. Nesne öğelerinizin üzerinden geçin ve bunları diziye atayın

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)

DEMO


4

Bunu dene:

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

Çözümünüz burada sunulan tüm en yavaş olacak ... İş kodu için kötü;)
HellBaby

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

var vals = Object.values(obj);

console.log(vals); //["1", "2", "3", "4"]

Soruya başka bir alternatif

var vals = Object.values(JSON.parse(obj)); //where json needs to be parsed

2

Ham javascript kullanarak, varsayalım:

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

Değerleri şu şekilde alabilirsiniz:

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

Çıktı:

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

2

Burada ne eksik emin değilim ama sadece aşağıdaki kodu denemek işe yarıyor. Burada bir şey eksik mi?

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

Aşağıdaki gibi bir değere sahip olduğunuzu varsayarsak

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

Ardından, aşağıdakileri kullanarak bunu bir javascript dizisine dönüştürebilirsiniz

var arr = [];
json = JSON.stringify(eval('(' + obj + ')')); //convert to json string
arr = $.parseJSON(json); //convert to javascript array

Bu json'u çok boyutlu javascript dizilerine dönüştürmek için de çalışır.

Bu sayfadaki diğer yöntemlerin hiçbiri, burada bahsettiğim yöntem dışında php json kodlu dizelerle çalışırken benim için tamamen işe yaramadı.


1

Burada nesneleri dizisini nasıl gelebileceğini bir örneğidir ve ardından diziyi sıralamak.

  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

Bu en iyi çözümdür. Sanırım.

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
Sınırlı ve anında yardım sağlayabilecek bu kod snippet'i için teşekkür ederiz. Bir Doğru bir açıklama ölçüde uzun vadeli değer artıracak göstererek neden bu soruna iyi bir çözüm olduğunu ve diğer benzer sorularla gelecek okuyucularına daha kullanışlı bir hale getirecektir. Yaptığınız varsayımlar dahil bazı açıklamalar eklemek için lütfen yanıtınızı düzenleyin .
Mogsdad

0

PHP kullanarak json Object Array & String'e dönüştürebilirsiniz.

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

Soru PHP ile değil javascript ile ilgilidir.
Charles Taylor

-1

Sen kullanabilirsiniz Object.assign()boş Düz Dizi ile []olduğu gibi target:

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

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

console.log(output)

Eğer işaretlerseniz polyfill , Object.assign(target, ...sources)sadece kopya tüm enumerable kendi özelliklerini sourcebir hedef nesneye nesneler. Bir targetdizi ise, dizi değişmezine sayısal anahtarlar ekler ve bu targetdizi nesnesini döndürür .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.