2014-01-20 4 views
0

나는이 나는 물체가 나는 분류되어 단지 키의 배열을 생성 할 수있는 방법을 알고 싶어 이렇게 분류되어 질수 알이정렬 값으로 키 배열을 생성

myList: { 
id1:{ 
     ts:'2010-01-12T00:51:00', 
     name:"roger" 
    }, 
id2:{ 
     ts:'2011-01-12T05:22:00', 
     name: "Tom" 
    }, 
id3:{ 
     ts:'2013-01-12T11:32:00', 
     name:"Jack" 
    } 
} 

처럼 보이는 물체 열쇠 "ts"에 따라. 나는 이것을 내림차순으로 원한다.

그렇다면 상기 오브젝트의 배열 [ID3, ID2, ID1] 것이다

내가 도착 어레이 정렬 이런 작업을 할 수 myList에 개체

for(var i=0:i<arr.length;i++) 
{ 
alert(myList[arr[i]].name); 
} 
인이 배열이 있으면
+0

날짜의 문자열 비교? – thefourtheye

+0

위의 ts 값은 1997 년, 1998 년 및 2000 년이지만, 이것이 의도 한 것임을 의심스럽게 생각합니다. – Semicolon

+0

나는 js에 익숙하다. 그래서 내가 배열을 생성 할 수있는 곳이 있다면 나는 그것을 이해할 것이다 – vijar

답변

1
var keys = Object.keys(myList).sort(function(a, b) { 
    if (myList[a].ts == myList[b].ts) { 
     return 0; 
    } 
    return myList[a].ts < myList[b].ts ? 1 : -1; 
}); 

console.log(keys); 

jsfiddle : http://jsfiddle.net/pWq2L/

설명 :

  1. 먼저 개체에서 키를 내 보냅니다. Object.keys(myList)
  2. 사용자 지정 비교 함수를 사용하여 정렬하고 비교 값의 .ts 특성을 참조합니다. ab

참고 비교 소자의 열쇠 : 데이터 구조 감안하고 배열하지 않다고하는 이유가 가정

0

:

var myList = { 
    id1: { 
    ts: new Date('2010-01-12T00:51:00'), 
    name: 'Roger' 
    }, 
    id2: { 
    ts: new Date('2011-01-12T05:22:00'), 
    name: 'Tom' 
    }, 
    id3:{ 
    ts: new Date('2013-01-12T11:32:00'), 
    name: 'Jack' 
    } 
} 

우리는 과 같이 배열 T : zerkms 용액을 연장

var arr = []; 
Object.keys(myList).forEach(function(item) { 
    arr.push(myList[item]); 
}); 
arr.sort(function(a, b) { 
    return a.ts > b.ts ? -1 : a.ts < b.ts ? 1 : 0; 
}) 
0

한가지 방법은 스마트 속성 증강 개체로 작업한다. 다목적 reduce이 편리 :

var result = keys.reduce(function(arr, k, i) { 
    var item = { 
     key: k, 
     index: i, 
     value: myList[k] 
    }; 
    arr.push(item); 
    return arr; 
}, []); 


//result: 
[ 
    { index:0 , key: id3, value: {...} }, 
    { index:1 , key: id2, value: {...} }, 
    { index:2 , key: id1, value: {...} } 
] 

reduce는 ECMAScript를 5 판의 일부입니다; 그래서 당신은 polyfill과 약간의 간격을 메울 수 있습니다.

http://jsfiddle.net/pWq2L/3/

관련 문제