developer tip

속성 이름을 기준으로 JavaScript 개체 정렬

optionbox 2021. 1. 7. 07:53
반응형

속성 이름을 기준으로 JavaScript 개체 정렬


나는 잠시 동안 찾고 있었고 다음과 같은 Javascript 객체를 정렬하는 방법을 원합니다.

{
    method: 'artist.getInfo',
    artist: 'Green Day',
    format: 'json',
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716'
}

다음을 가져 오려면 이름을 알파벳순으로 정렬합니다.

{
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716',
    artist: 'Green Day',
    format: 'json',
    method: 'artist.getInfo'
}

이 작업을 수행 할 코드를 찾을 수 없습니다. 누구든지 저에게 도움을 줄 수 있습니까?


정의 에 따라 객체의 키 순서는 정의되지 않으므로 미래에 대비할 수있는 방식으로 그렇게 할 수는 없을 것입니다. 대신 개체가 실제로 사용자에게 표시 될 때 이러한 키를 정렬하는 것을 고려해야합니다. 내부적으로 어떤 정렬 순서를 사용하든 상관 없습니다.

관례 상 대부분의 브라우저는 추가 된 순서대로 객체의 키 순서를 유지합니다. 따라서이 작업을 수행 할 수 있지만 항상 작동 할 것이라고 기대하지는 마십시오.

function sortObject(o) {
    var sorted = {},
    key, a = [];

    for (key in o) {
        if (o.hasOwnProperty(key)) {
            a.push(key);
        }
    }

    a.sort();

    for (key = 0; key < a.length; key++) {
        sorted[a[key]] = o[a[key]];
    }
    return sorted;
}

이 함수는 객체를 취하고 [key, value] 형식의 정렬 된 배열 배열을 반환합니다.

function (o) {
   var a = [],i;
   for(i in o){ 
     if(o.hasOwnProperty(i)){
         a.push([i,o[i]]);
     }
   }
   a.sort(function(a,b){ return a[0]>b[0]?1:-1; })
   return a;
}

The object data structure does not have a well defined order. In mathematical terms, the collection of keys in an object are an Unordered Set, and should be treated as such. If you want to define order, you SHOULD use an array, because an array having an order is an assumption you can rely on. An object having some kind of order is something that is left to the whims of the implementation.


Just use sorted stringify() when you need to compare or hash the results.


// if ya need old browser support
Object.keys = Object.keys || function(o) {  
var result = [];  
for(var name in o) {  
    if (o.hasOwnProperty(name))  
      result.push(name);  
}  
    return result;  
};

var o = {c: 3, a: 1, b: 2};
var n = sortem(o);

function sortem(old){
  var newo = {}; Object.keys(old).sort().forEach(function(k) {new[k]=old[k]});
  return newo;
}

// deep
function sortem(old){
  var newo = {}; Object.keys(old).sort().forEach(function(k){ newo[k]=sortem(old[k]) });
  return newo;
}
sortem({b:{b:1,a:2},a:{b:1,a:2}})

This should be used with caution as your code shouldn't rely on Object properties order. If it's just a matter of presentation (or just for the fun !), you can sort properties deeply like this :

function sortObject(src) {
  var out;
  if (typeof src === 'object' && Object.keys(src).length > 0) {
    out = {};
    Object.keys(src).sort().forEach(function (key) {
      out[key] = sortObject(src[key]);
    });
    return out;
  }
  return src;
}

ReferenceURL : https://stackoverflow.com/questions/1359761/sorting-a-javascript-object-by-property-name

반응형