Mengubah objek JavaScript dengan kunci numerik menjadi array

175

Saya memiliki objek seperti ini yang kembali sebagai respons JSON dari server:

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

Saya ingin mengubahnya menjadi array JavaScript seperti ini:

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

Apakah ada cara terbaik untuk melakukan ini? Di mana pun saya membaca, orang menggunakan logika kompleks menggunakan loop. Jadi, apakah ada metode alternatif untuk melakukan ini?

Nikhil Agrawal
sumber
3
duplikat: stackoverflow.com/questions/6857468/…
BENARD Patrick
8
Omong kosong

Jawaban:

328

Ini sebenarnya sangat lurus ke depan dengan jQuery $.map

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

BIOLA

dan hampir semudah tanpa jQuery juga, mengonversi kunci menjadi array dan kemudian memetakan kembali nilai-nilai dengan Array.map

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

BIOLA

Itu dengan asumsi itu sudah diuraikan sebagai objek javascript, dan sebenarnya bukan JSON, yang merupakan format string, dalam hal ini run through JSON.parsejuga diperlukan.

Di ES2015 ada Object.valuesuntuk menyelamatkan, yang membuat ini sangat mudah

var arr = Object.values(obj);
Adeneo
sumber
1
@adeneo Pak, bisakah Anda memberikan penjelasan tentang metode htis?
Nikhil Agrawal
1
@ adeneo alias Tn. luka bakar ... Terima kasih atas solusi cepat ini.
Dzeimsas Zvirblis
1
@NikhilAgrawal Triknya di sini adalah menggunakan Object.keys (), yang mengembalikan kunci-kunci objek (= properti enumerable-nya sendiri) sebagai array . Kemudian kita bisa menggunakan array.map untuk mengganti setiap kunci dengan nilai yang sesuai dalam array baru.
antoine
1
Ini adalah jawaban, tetapi bukan jawaban yang ramah.
sheriffderek
1
Pertanyaannya tidak eksplisit, tetapi saya berasumsi bahwa kunci objek adalah indeks dari array berdasarkan sifatnya (0,1,2,3). Hanya menunjukkan bahwa orang harus tahu bahwa metode ini tidak menjamin pesanan apa pun dalam array; jika kunci adalah indeks maka Anda perlu secara eksplisit memesannya sehingga array dibangun dalam urutan yang benar.
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]);
}

Semoga ini yang Anda cari!

benhowdle89
sumber
Terima kasih. sangat membutuhkan itu. seseorang menggunakan objek sebagai array sepanjang satu ton kode, yang baik-baik saja sampai saya perlu membangun di atasnya ...
amanda fouts
Terima kasih! Jawaban sempurna.
Vincent
sangat dekat dengan apa yang saya butuhkan terima kasih: untuk (var x dalam data) {arr [x] = data [x]; }
Andrew
24

Anda cukup melakukannya

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

Satpal
sumber
20

Tidak ada yang seperti "objek JSON" - JSON adalah notasi serialisasi.

Jika Anda ingin mengubah objek javascript Anda menjadi array javascript , Anda bisa menulis loop Anda sendiri [yang tidak akan terlalu rumit!], Atau Anda mengandalkan metode underscore.js _.toArray() :

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();
moonwave99
sumber
1
Terima kasih - bekerja seperti pesona. Tetapi bagaimana membuatnya melakukan hal yang sama untuk objek internal juga (objek di dalam objek)? Objek internal juga harus menjadi anggota rata array di tingkat root (sehingga mereka dapat diteruskan ke, katakanlah, datatables.net dll.)
Gopalakrishna Palem
+1: "Tidak ada yang seperti" objek JSON "- JSON adalah notasi serialisasi." - Saya tidak percaya berapa kali saya harus mendengar ini sebelum sepenuhnya memahaminya.
radbyx
9

Tidak ada yang sulit di sini. Lingkari elemen objek Anda dan tetapkan ke array

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

http://jsfiddle.net/Qq2aM/

EoiFirst
sumber
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

Tareq Salah
sumber
4

Coba ini:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
    newArr.push([obj.value]);
});
Dev Afghanistan
sumber
Solusi Anda akan menjadi yang paling lambat dari semua yang disajikan di sini ... Buruk untuk kode bisnis;)
HellBaby
3
var obj = {"0":"1","1":"2","2":"3","3":"4"};

var vals = Object.values(obj);

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

Alternatif lain untuk pertanyaan

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

Menggunakan javascript mentah, misalkan Anda memiliki:

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

Anda bisa mendapatkan nilai dengan:

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

Keluaran:

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

Tidak yakin apa yang saya lewatkan di sini tetapi hanya mencoba kode di bawah ini berhasil. Apakah saya kehilangan sesuatu di sini?

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));
  }
 })
Vatsal
sumber
1

Anggap Anda memiliki nilai seperti berikut

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

Kemudian Anda bisa mengubahnya menjadi array javascript menggunakan yang berikut ini

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

Ini berfungsi untuk mengubah json menjadi javascript array multi-diminsional juga.

Tidak ada metode lain di halaman ini yang tampaknya bekerja sepenuhnya untuk saya ketika bekerja dengan string json-encoded php kecuali metode yang saya sebutkan di sini.

skidadon
sumber
1

Berikut adalah contoh bagaimana Anda bisa mendapatkan array objek dan kemudian mengurutkan array.

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

Ini solusi terbaik. Aku pikir begitu.

Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})
tutaro
sumber
0
      var data = [];

      data  = {{ jdata|safe }}; //parse through js
      var i = 0 ;
      for (i=0;i<data.length;i++){
         data[i] = data[i].value;
      }
game cz
sumber
2
Terima kasih atas cuplikan kode ini, yang mungkin memberikan bantuan terbatas dan segera. Sebuah penjelasan yang tepat akan sangat meningkatkan nilai jangka panjang dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah ini, dan akan membuatnya lebih bermanfaat untuk pembaca masa depan dengan lainnya, pertanyaan-pertanyaan serupa. Harap edit jawaban Anda untuk menambahkan beberapa penjelasan, termasuk asumsi yang Anda buat.
Mogsdad
0

Anda dapat mengubah objek json menjadi Array & String menggunakan PHP.

$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++;
}
Manav Akela
sumber
Pertanyaannya adalah tentang javascript bukan PHP.
Charles Taylor
-1

Anda bisa menggunakan Object.assign()dengan literal array kosong []sebagai target:

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

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

console.log(output)

Jika Anda memeriksa polyfill , Object.assign(target, ...sources)cukup salin semua properti enumerable sendiri dari sourceobjek ke objek target. Jika targetarray, itu akan menambahkan kunci numerik ke array literal dan mengembalikan targetobjek array.

adiga
sumber