सरणी में संख्यात्मक कुंजियों के साथ जावास्क्रिप्ट ऑब्जेक्ट को परिवर्तित करना


175

मेरे पास इस तरह की एक वस्तु है जो सर्वर से JSON प्रतिक्रिया के रूप में वापस आ रही है:

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

मैं इसे इस तरह एक जावास्क्रिप्ट सरणी में बदलना चाहते हैं:

["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 सर आप htis विधियों के बारे में कुछ स्पष्टीकरण प्रदान कर सकते हैं।
निखिल अग्रवाल 7

1
@adeneo उर्फ ​​मिस्टर बर्न ... इस त्वरित समाधान के लिए धन्यवाद।
डेज़िमासस ज़विर्ब्लिस

1
@ निखिलअग्रवाल यहाँ पर ट्रिक का उपयोग Object.keys () के लिए किया गया है, जो एक सरणी के रूप में ऑब्जेक्ट की कुंजियाँ (= अपने स्वयं के असंख्य गुण) लौटाता है । फिर हम एक नए ऐरे में संबंधित कुंजी द्वारा प्रत्येक कुंजी को बदलने के लिए array.map का उपयोग कर सकते हैं।
एंटोनी

1
यह एक उत्तर है, लेकिन बहुत अनुकूल नहीं है।
शेरिफडेरेक

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

आशा है कि यह आप के बाद क्या है!


धन्यवाद। वास्तव में जरूरत है कि किसी ने कोड के एक टन में एक सरणी के रूप में एक वस्तु का उपयोग किया, जो तब तक ठीक था जब तक कि मुझे इसके शीर्ष पर निर्माण करने की आवश्यकता न हो ...
amanda fouts

धन्यवाद! एकदम सही जवाब।
विंसेंट

बहुत जरूरी है जो मुझे धन्यवाद चाहिए: (डेटा में var x) {arr [x] = data [x]; }
एंड्रयू

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 एक क्रमांकन संकेतन है।

यदि आप अपनी जावास्क्रिप्ट ऑब्जेक्ट को जावास्क्रिप्ट सरणी में बदलना चाहते हैं , तो या तो आप अपना लूप लिखें [जो कि जटिल नहीं होगा!], या आप अंडरस्कोर पर निर्भर करते हैं। js_.toArray() विधि:

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

1
धन्यवाद - आकर्षण की तरह काम करता है। लेकिन इसे आंतरिक वस्तुओं (वस्तुओं के भीतर की वस्तुओं) के लिए भी कैसे बनाया जाए? आंतरिक वस्तुएं भी रूट स्तर पर सरणी के फ्लैट सदस्य बननी चाहिए (ताकि उन्हें, कहना, datatables.net इत्यादि को पारित किया जा सके)
गोपालकृष्ण पालम

+1: "" JSON ऑब्जेक्ट "जैसा कुछ नहीं है - JSON एक क्रमांकन संकेतन है।" - मुझे विश्वास नहीं हो सकता कि इसे पूरी तरह समझने से पहले मुझे कितनी बार यह सुनना पड़ा।
राडबीक्स

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

आपका समाधान यहां प्रस्तुत सभी में से सबसे धीमा होने वाला है ... व्यापार कोड के लिए बुरा?)
नरकबाई

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

फिर आप इसे निम्न का उपयोग करके एक जावास्क्रिप्ट सरणी में बदल सकते हैं

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

यह जन्स को मल्टी-डिमिनिशनल जावास्क्रिप्ट एरेज़ में बदलने के लिए भी काम करता है।

इस पृष्ठ पर अन्य तरीकों में से कोई भी मेरे लिए पूरी तरह से काम नहीं कर रहा था, जब मैं यहां उल्लेख कर रहा हूं उस विधि को छोड़कर php json-encoded स्ट्रिंग्स के साथ काम करना।


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
इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि समस्या का एक अच्छा समाधान क्यों है, यह दिखा कर इसके दीर्घकालिक मूल्य में बहुत सुधार होगा , और यह भविष्य के पाठकों को अन्य, समान प्रश्नों के साथ और अधिक उपयोगी बना देगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
मोगादाद

0

आप PHP का उपयोग करके json Object को Array & String में बदल सकते हैं।

$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 के बारे में है।
चार्ल्स टेलर

-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सरणी ऑब्जेक्ट को वापस कर देगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.