2016-08-08 6 views
0

문자열 및 숫자 값이있는 객체의 배열이 있습니다. 결합 된 값에 대한 작업을 자연스럽게해야합니다. 예 :문자열 및 숫자 키 값을 기반으로 객체 배열에 대한 노드 js 자연 정렬

입력 배열이 단지 키 2는 숫자이고 원하는 KEY3 + KEY1 + 키 2 형식의 오름차순으로 정렬되어야

[ 
{ 
    key1: '156557_08_315F036D', 
    key2: 30, 
    key3: 's' }, 
    { 
    key1: '156557_08_315F036D', 
    key2: 10, 
    key3: 'm' }, 
{ 
    key1: '156557_08_315F036D', 
    key2: 10, 
    key3: 's' }, 
    { 
    key1: '156557_08_315F036D', 
    key2: 15, 
    key3: 's' }, 
    { 
    key1: '156557_08_315F036D', 
    key2: 20, 
    key3: 's' } 
] 

는 문자열 naturally..not 정렬된다.

출력은 다음과 같습니다 키 2의

[ 
{ 
    key1: '156557_08_315F036D', 
    key2: 10, 
    key3: 'm' }, 
{ 
    key1: '156557_08_315F036D', 
    key2: 10, 
    key3: 's' }, 
{ 
    key1: '156557_08_315F036D', 
    key2: 15, 
    key3: 's' }, 
{ 
    key1: '156557_08_315F036D', 
    key2: 20, 
    key3: 's' }, 
{ 
    key1: '156557_08_315F036D', 
    key2: 30, 
    key3: 's' } 
] 

arr.sort(function (a, b) { 
    return (
     a.key3 + a.key1 + parseInt(a.key2) > 
     b.key3 + b.key1 + parseInt(b.key2) ? 
     1 : 
     ((b.key3 + b.key1 + parseInt(b.key2) > 
     a.key3 + a.key1 + parseInt(a.key2)) ? 
     -1 : 0)); 
    }); 

시도 toString하지만, 문자열 정렬을했다.

+0

확인. 코드는 어디에 있습니까? – str

+0

이 @str에 추가되었습니다. – nis

답변

0

질문을 잘못 읽었 으면 === 연산자를 사용할 수 있습니다. 이것은 '=='연산자와 같은 유형을 자동으로 변환하지 않습니다. 나는 당신이 무엇을하려고하는지 확신하지 못한다. 당신이 정렬 기준을 어떤 속성의 순서에 기초하고 싶어하는 것처럼 보인다. 그렇다면 아래 코드가 작동합니다.

function compareFunction(obj1,obj2){ 
    var ord = ['key3','key1','key2']; //Specify order here 
    for(var i =0;i<ord.length;i++){ 
     if(obj1[ord[i]] === obj2[ord[i]]){ 
      continue; 
     } 
     else{ 
      if(obj1[ord[i]] < obj2[ord[i]]){ 
       return -1; 
      } 
      if(obj1[ord[i]] > obj2[ord[i]]){ 
       return 1; 
      } 
     } 
    } 
return 0; 
} 

다음은 단순히 arr.sort (compareFunction)를 호출합니다. 당신이 여분의 종속성을 상관하지 않는 경우

1

, 여기 thenBy라는 멋진 라이브러리는 다음과 같습니다 기능을 사용하거나 개체 속성의 키 이름으로

// first by length of name, then by population, then by ID 
data.sort(
    firstBy(function (v) { return v.name.length; }) 
    .thenBy("population") 
    .thenBy("id") 
); 

이 종류의. 그것은 굉장

const sorted = _.orderBy(arr, ['key3', 'key1', 'key2'], ['asc', 'asc', 'asc']); 

:

0

나는 Lodash를 사용!

+0

주의 사항 : lodash는 자연 순서 정렬을하지 않습니다. – Mrchief