2013-11-24 4 views
1

확인은 그래서 (다른 속성을 간결하게 박탈 된)이 입력을 제공 :자바 스크립트에서 배열의 색인에 객체를 정렬 하시겠습니까?

var names = [{ 
    name: 'Michael' 
}, { 
    name: 'Liam' 
}, { 
    name: 'Jake' 
}, { 
    name: 'Dave' 
}, { 
    name: 'Adam' 
}]; 

들이 알파벳순으로 정렬, 해당 배열에없는 경우 내가 다른 배열의 인덱스별로 정렬, 그리고 것입니다.

var list = ['Jake', 'Michael', 'Liam']; 

나에게의 출력주기 : 나는 보라 대시를 사용하려고했습니다

Jake, Michael, Liam, Adam, Dave 

을하지만 아주 옳지 않아 :

names = _.sortBy(names, 'name'); 
names = _.sortBy(names, function(name) { 
    var index = _.indexOf(list, name.name); 
    return (index === -1) ? -index : 0; 
}); 

를 출력 그대로 :

Jake, Liam, Michael, Adam, Dave 

도움이 될 것입니다.

+0

를? – elclanrs

+0

나는 자바 스크립트 안에 sort()라는 함수가 있다는 것을 알고 있고 배열을 알파벳순으로 정렬 할 수 있기를 바랍니다. 이제 문제는 요소를 다른 배열로 옮기는 것입니다. list.sort(); 출력됩니다 Adam, Dave, Jake, Michael, Liam – ProllyGeek

+0

@elclanrs - "해당 배열에 없으면 알파벳순으로 정렬", 그래서 전체 배열은 사전 순으로 정렬되지만 그 3 개의 키가 먼저 오면 말이된다. 예, 나는 이미 프로젝트에서 lodash를 사용하고 있었지만'sort() '를 알고 있습니다. 따라서 내 의견으로는 (더 깔끔하게) lodash보다 원시 메소드를 사용하는 것이 중요하지 않습니다. – Ben

답변

3

닫기가 완료되었습니다. return (index === -1) ? -index : 0;이 문제입니다.

당신의 접근 방식에 따라, 그것은 다음과 같이한다 : 왜`Adam` 다음`Dave`, 어떻게 한 정렬 할 것을

names = _.sortBy(names, 'name') 

var listLength = list.length; 

_.sortBy(names, function(name) { 
    var index = _.indexOf(list, name.name); 
    // If the name is not in `list`, put it at the end 
    // (`listLength` is greater than any index in the `list`). 
    // Otherwise, return the `index` so the order matches the list. 
    return (index === -1) ? listLength : index; 
}); 
+0

훌륭한 작품입니다. 당신의 설명에 감사드립니다. :-) – Ben