2017-05-08 6 views
0
내가 어떤 개체보기를 정렬 할

내가 "이름"을 정렬 할이종류의 객체는 이후

data = { 
     "imH3i4igFNxM3GL": { 
      "name": "Nacky", 
      "age": 12 
     }, 
     "vuzPuZUmyT8Z5nE": { 
      "name": "Emmy", 
      "age": 20 
     }, 
     "OkIPDY1nGjxlq3W": { 
      "name": "Nat", 
      "age": 20 
     } 
} 

좋아 분류 잃었다. 이 문제를 해결하기 위해 Lodash를 사용하려고했습니다.

_.sortBy(data, [function(o) { return o.name; }]); 

하지만, 그것은 키

[ 
    { 
     "name": "Emmy", 
     "age": 20 
    }, 
    { 
     "name": "Nacky", 
     "age": 12 
    }, 
    { 
     "name": "Nat", 
     "age": 20 
    } 
] 

나는 그것이 같은

{ 
    "vuzPuZUmyT8Z5nE": { 
     "name": "Emmy", 
     "age": 20 
    }, 
    "imH3i4igFNxM3GL": { 
     "name": "Nacky", 
     "age": 12 
    }, 
    "OkIPDY1nGjxlq3W": { 
     "name": "Nat", 
     "age": 20 
    } 
} 

어떻게해야합니까 같은 키를 사용하여 나에게 정렬 된 개체를 반환 할 않고 나에게 객체의 배열을 반환? 덕분에

+0

당신은 배열을 정렬하지 않는; 당신은 객체를 정렬하려고합니다. 개체를 반복하는 것은 원하는 순서로 키를 출력하는 것이 보장되지 않기 때문에 일반적으로 나쁜 생각입니다 [비슷한 질문에 대한이 주석 참조] (http://stackoverflow.com/questions/1069666/sorting-javascript- 객체 별 속성 값 # comment67886877_1069666) –

+0

글쎄,'_.sortBy'는 객체를 받아들이지 만 문서마다 배열을 반환합니다. Mike가 말했듯이 "정렬 된"키를 가진 객체는 얻을 수 없습니다. –

답변

0

JS의 객체는 정렬 할 수 없으며 속성의 순서는 신뢰할 수 없습니다. 즉, 브라우저의 구현에 따라 다릅니다. 그래서 _.sortBy()이 개체를 정렬 된 배열로 변환합니다.

두 가지 옵션을 생각해 볼 수 있습니다. 당신은 단지 객체의 키 순서 배열을해야하는 경우

배열

의 개체에 키를 추가, 그래서 당신은 목록을 렌더링 할 수 있습니다.

var data = { 
 
     "imH3i4igFNxM3GL": { 
 
      "name": "Nacky", 
 
      "age": 12 
 
     }, 
 
     "vuzPuZUmyT8Z5nE": { 
 
      "name": "Emmy", 
 
      "age": 20 
 
     }, 
 
     "OkIPDY1nGjxlq3W": { 
 
      "name": "Nat", 
 
      "age": 20 
 
     } 
 
}; 
 

 
var result = _(data) 
 
    .map(function(v, k) { // insert the key into the object 
 
    return _.merge({}, v, { key: k }); 
 
    }) 
 
    .sortBy('name') // sort by name 
 
    .value(); 
 
    
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

은 주문 키의 배열을 생성 순서 배열

를 작성하고 순서대로 객체를 렌더링 할 때이를 사용합니다.

var data = { 
 
     "imH3i4igFNxM3GL": { 
 
      "name": "Nacky", 
 
      "age": 12 
 
     }, 
 
     "vuzPuZUmyT8Z5nE": { 
 
      "name": "Emmy", 
 
      "age": 20 
 
     }, 
 
     "OkIPDY1nGjxlq3W": { 
 
      "name": "Nat", 
 
      "age": 20 
 
     } 
 
}; 
 

 
var orderArray = _(data) 
 
    .keys() // create an array of keys 
 
    .sortBy(function(key) { // sort the array using the original names 
 
    return data[key].name; 
 
    }) // sort by name 
 
    .value(); 
 

 
console.log('The order array', orderArray); 
 

 
console.log(orderArray.map(function(k) { 
 
    return data[k]; 
 
}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>