2017-06-09 5 views
1

Ich habe ein Array von Objekten, mit der Art der fruit/vegetable:lodash - Objekt auf den ersten Platz im Array verschieben?

Für den einen Typen vegetable ich habe, will ich es das erste Element in dem Array sein, aber ich bin nicht sicher, wie dies zu tun mit lodash.

var items = [ 
    {'type': 'fruit', 'name': 'apple'}, 
    {'type': 'fruit', 'name': 'banana'}, 
    {'type': 'vegetable', 'name': 'brocolli'}, // how to make this first item 
    {'type': 'fruit', 'name': 'cantaloupe'} 
]; 

Hier ist eine Geige mit meinem Versuch: https://jsfiddle.net/zg6js8af/

Wie kann ich Typen vegetable das erste Element in dem Array zu sein, unabhängig von ihrem aktuellen Index?

Antwort

4

mit lodash _.sortBy verwenden. Wenn der Typ Gemüse ist, wird er zuerst sortiert, sonst der zweite.

var items = [ 
 
    {type: 'fruit', name: 'apple'}, 
 
    {type: 'fruit', name: 'banana'}, 
 
    {type: 'vegetable', name: 'brocolli'}, 
 
    {type: 'fruit', name: 'cantaloupe'} 
 
]; 
 

 
var sortedItems = _.sortBy(items, function(item) { 
 
    return item.type === 'vegetable' ? 0 : 1; 
 
}); 
 

 
console.log(sortedItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

Funktioniert wie ein Charme, danke :) – Wonka

1

Warum verwenden Sie lodash, wenn Sie es nicht benötigen (und Funktionscode mit einem einzigen reduce schreiben können)?

var items = [ 
    {'type': 'fruit', 'name': 'apple'}, 
    {'type': 'fruit', 'name': 'banana'}, 
    {'type': 'vegetable', 'name': 'brocolli'}, 
    {'type': 'fruit', 'name': 'cantaloupe'} 
]; 

var final = items.reduce(function(arr,v) { 
    if (v.type === 'vegetable') return [v].concat(arr) 
    arr.push(v) 
    return arr 
},[]); 
alert(JSON.stringify(final)); 
+0

Thank you eine alternative Methode für die Ansicht, upvoted :) Ich lodash an vielen Orten bin schon mit und es vorziehen, seine saubere Syntax um ehrlich zu sein; auch wenn das Endziel das gleiche ist :) – Wonka

1

Sie können es durch type in desc Richtung mit der Bestellung tun:

var res = _.orderBy(items, ['type'], ['desc']); 

oder partition

var res = _.chain(items) 
    .partition({type: 'vegetable'}) 
    .flatten() 
    .value(); 
+0

Danke, aber ich habe versucht, es funktioniert basierend auf dem tatsächlichen Wert '==' '' Gemüse 'zu bekommen, so ist es flexibel :) – Wonka

+0

@Wonka schaute auf meine bearbeitete Antwort – stasovlas

+0

Nochmals vielen Dank, aber ich ging mit dem '_.sortBy', da es eine einzige Methode war :) – Wonka

Verwandte Themen