숫자 키가있는 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 선생님 htis 방법에 대한 설명을 제공해 주시겠습니까?
Nikhil Agrawal

1
@adeneo 일명 Mr. burns ...이 빠른 솔루션에 감사드립니다.
Dzeimsas Zvirblis

1
@NikhilAgrawal 여기서 트릭은 Object.keys ()를 사용하여 객체의 키 (= 자체 열거 가능 속성) 를 배열로 반환하는 것 입니다. 그런 다음 array.map을 사용하여 각 키를 새 배열의 해당 값으로 바꿀 수 있습니다.
antoine 2018 년

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

이것이 당신이 추구하는 것이기를 바랍니다!


감사. 정말로 필요했습니다. 누군가가
엄청나게

감사합니다! 완벽한 답변.
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은 직렬화 표기법입니다.

자바 스크립트 객체자바 스크립트 배열 로 변환 하려면 자신 만의 루프를 작성하거나 (복잡하지는 않습니다!) 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/


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

귀하의 솔루션은 여기에 제시된 것 중에서 가장 느리게 진행될 것입니다 ... 비즈니스 코드에 나쁘다;)
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"};

그런 다음 다음을 사용하여 이것을 자바 스크립트 배열로 바꿀 수 있습니다

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

이것은 json을 multi-diminsional javascript arrays로 변환하는데도 효과적입니다.

이 페이지의 다른 방법은 여기에 언급 한 방법을 제외하고 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

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가 아닌 자바 스크립트에 관한 것입니다.
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.