การแปลงวัตถุ JavaScript ด้วยปุ่มตัวเลขให้เป็นอาร์เรย์


175

ฉันมีวัตถุแบบนี้กลับมาเป็นการตอบสนอง JSON จากเซิร์ฟเวอร์:

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

ฉันต้องการแปลงเป็นอาร์เรย์ JavaScript เช่นนี้

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

มีวิธีที่ดีที่สุดในการทำเช่นนี้? ทุกที่ที่ฉันอ่านผู้คนกำลังใช้ตรรกะที่ซับซ้อนโดยใช้ลูป ดังนั้นมีวิธีการอื่นในการทำเช่นนี้?



8
เพียงห่วงไม่ได้เป็นตรรกะที่ซับซ้อนโดยวิธี
:)

คำตอบ:


328

จริงๆแล้วมันตรงไปตรงมากับ jQuery $.map

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

ซอ

และเกือบจะง่ายเหมือนกันโดยไม่ต้อง jQuery เช่นกันการแปลงคีย์ไปยังอาร์เรย์แล้วทำการแมปค่ากลับด้วย Array.map

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

ซอ

นั่นคือสมมติว่ามันถูกวิเคราะห์แล้วเป็นวัตถุจาวาสคริปต์และไม่ใช่ JSON จริงซึ่งเป็นรูปแบบสตริงในกรณีนั้นการเรียกใช้ผ่านJSON.parseก็จำเป็นเช่นกัน

ใน ES2015 มีObject.valuesการช่วยเหลือซึ่งทำให้มันง่าย

var arr = Object.values(obj);

1
@adeneo Sir โปรดให้คำอธิบายเกี่ยวกับวิธีการ htis
Nikhil Agrawal

1
@adeneo aka นายเบิร์นส์ ... ขอบคุณสำหรับวิธีแก้ปัญหาด่วนนี้
Dzeimsas Zvirblis

1
@NikhilAgrawal เคล็ดลับที่นี่คือการใช้ Object.keys () ซึ่งผลตอบแทนที่ปุ่มของวัตถุ (= คุณสมบัตินับของตัวเอง) เป็นอาร์เรย์ จากนั้นเราสามารถใช้ array.map เพื่อแทนที่แต่ละคีย์ด้วยค่าที่สอดคล้องกันในอาร์เรย์ใหม่
ทอน

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

หวังว่านี่คือสิ่งที่คุณหลังจาก!


ขอบคุณ จำเป็นจริงๆ บางคนใช้วัตถุเป็นอาเรย์ตลอดรหัสหนึ่ง ๆ ซึ่งก็ดีจนกระทั่งฉันต้องสร้างมันขึ้นมา ...
แมนดา fouts

ขอบคุณ! คำตอบที่สมบูรณ์แบบ
Vincent

ใกล้มากกับสิ่งที่ฉันต้องการขอบคุณ: สำหรับ (var x in data) {arr [x] = data [x]; }
Andrew


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

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/



4

ลองสิ่งนี้:

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

ทางออกของคุณจะช้าที่สุดจากทั้งหมดที่นำเสนอที่นี่ ... ไม่ดีสำหรับรหัสธุรกิจ;)
HellBaby

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

การใช้จาวาสคริปต์แบบดิบสมมติว่าคุณมี:

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 แบบหลายมิติได้เช่นกัน

ไม่มีวิธีอื่นใดในหน้านี้ดูเหมือนจะทำงานได้อย่างสมบูรณ์สำหรับฉันเมื่อทำงานกับสตริงที่เข้ารหัส jp php ยกเว้นวิธีที่ฉันพูดถึงในที่นี้


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

0

คุณสามารถแปลง json Object เป็น Array & String โดยใช้ 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++;
}

คำถามเกี่ยวกับจาวาสคริปต์ไม่ใช่ PHP
Charles Taylor

-1

คุณสามารถใช้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วัตถุอาร์เรย์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.