2016-07-04 3 views
-3

Предположим, я имею два массива, а именно namesArray и имена нижеСортировка Первый массив с порядком второго массива

var namesArray = [{"name":"Charlie","age":3},{"name":"Dog","age":1},{"name":"Baker","age":7},{"name":"Abel","age":9}]; 

var names = ['Baker', 'Dog', 'Abel', 'Charlie']; 

Могу ли я достичь следующих в UnderscoreJS так, чтобы отсортировать массив по имени namesArray в заказе, чтобы все элементы с именами namesArray были в таком же порядке, как , имена.

+0

Вы пробовали что-нибудь еще? Можем ли мы увидеть какой-то код, который указывает, вы хотя бы попробовали? –

+2

Это не имеет никакого отношения к Underscore, но простым навыкам кодирования и простому javascript –

ответ

2

В простом Javascript вы можете использовать Array#sort с объектом в качестве справочника для порядка сортировки.

var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }], 
 
    names = ['Baker', 'Dog', 'Abel', 'Charlie'], 
 
    hash = Object.create(null); 
 

 
names.forEach(function (a, i) { 
 
    hash[a] = i + 1; 
 
}); 
 

 
namesArray.sort(function (a, b) { 
 
    return (hash[a.name] || 0) - (hash[b.name] || 0); 
 
}); 
 

 
console.log(namesArray);

2

Посмотрите индекс каждого имени в sort(). Не так производительным, как создание хэш индексов, но шансы, что это не то, что критическая либо

namesArray.sort(function(a,b){ 
    return names.indexOf(a.name) - names.indexOf(b.name); 
}); 
0

Существует не много, чтобы сделать с underscrore, но вы можете сделать это следующим образом: Я думаю, с помощью хэш как what Nina does будет лучше indexOf в отношении производительности.

var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }]; 
 

 
var names = ['Baker', 'Dog', 'Abel', 'Charlie']; 
 
var sorted = _.sortBy(namesArray, o => names.indexOf(o.name)); 
 

 
console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

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