2016-08-11 2 views
0

Я получаю массив объектов с сервера, но они не в том порядке, в котором я хочу выплюнуть их обратно. К сожалению, заказ, который я хочу, также не является алфавитом. Мне интересно, какой лучший способ переупорядочить элементы массива. Кроме того, если есть способ, я могу использовать array.sort. Как он работает в настоящее время:Лучший способ поместить элементы массива в пользовательский порядок в Javascript

function arraySort(array) { 
    let orderedArray = new Array(); 
    array.map(item => (
    item.key === 'Person' ? orderedArray[0] = item : null, 
    item.key === 'Place' ? orderedArray[1] = item : null, 
    item.key === 'Thing' ? orderedArray[2] = item : null 
)); 
    return orderedArray; 
} 
+2

вы знаете, что вы можете передать пользовательскую функцию сравнения для [ 'sort'] (ли https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Ссылка/Global_Objects/Array/вид)? –

+6

Возможный дубликат [Как определить пользовательскую функцию сортировки в javascript?] (Http://stackoverflow.com/questions/5002848/how-to-define-custom-sort-function-in-javascript) –

+0

Я не думаю это дубликат. OP спрашивает, как реализовать произвольный sort – naomik

ответ

2

Здесь вы идете.

var order = ['Person', 'Place', 'Thing']; 
 
var a = [ 
 
    { key: 'Place' }, 
 
    { key: 'Thing' }, 
 
    { key: 'Place' }, 
 
    { key: 'Person' }, 
 
    { key: 'Place' }, 
 
    { key: 'Thing' }, 
 
    { key: 'Person' } 
 
]; 
 

 
var b = a.sort(function(a,b) { 
 
    return order.indexOf(a.key) - order.indexOf(b.key); 
 
}); 
 

 
console.log(b);

+0

Хорошая работа. Это, вероятно, лучший ответ, который вы можете дать, не зная больше от OP. – naomik

+0

Спасибо! Это именно то, что я искал! – JLegendre

+1

@JLegendre в следующий раз отправьте образец ввода и ожидаемый результат с вашим вопросом. – naomik

-1

Я бы сделал это, как этот

function arraySort(array) { 
    let myOrder = ['Person', 'Jhony', 'Card', 'TheFlash']; 

    let orderedArray = new Array(); 
    array.map(item => (
    orderedArray[myOrder.indexOf(myOrder)] = item 
)); 
    return orderedArray; 
} 
Смежные вопросы