2013-11-24 4 views
1

ИТАК дал этот вход (другие свойства были лишены для краткости):Сортировка объекта по индексам массива в JavaScript?

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

Почему '' Adam' затем Dave', как ты что-то выход? – elclanrs

+0

Надеюсь, вы знаете, что в javascript есть функция, называемая sort(), и она может сортировать ваш массив по алфавиту! поэтому теперь проблема заключается в перемещении ваших элементов в другой массив? list.sort(); будет выводить Adam, Dave, Jake, Michael, Liam – ProllyGeek

+0

@elclanrs - «если они не находятся в этом массиве, сортируйте по алфавиту», поэтому в других выражениях весь массив сортируется в алфавитном порядке, но эти три клавиши на первом месте, если это имеет смысл. Да, я знаю «sort()», хотя я уже использовал lodash в проекте, поэтому мне не важно использовать собственный метод над (на мой взгляд, опрятным) lodash one. – Ben

ответ

3

Вы близко. return (index === -1) ? -index : 0; - проблема.

Следуя свой подход, он должен выглядеть следующим образом:

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

Смежные вопросы