我有一个对象数组,类型为fruit
/ vegetable
:
对于我所拥有的一种类型vegetable
,我希望它是数组中的第一项,但我不知道如何使用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'}
];
这是我尝试的小提琴: https://jsfiddle.net/zg6js8af/
如何将类型vegetable
作为数组中的第一项,而不管其当前索引是什么?
答案 0 :(得分:10)
使用lodash _.sortBy。如果类型是蔬菜,它将首先排序,否则排序第二。
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>
&#13;
答案 1 :(得分:3)
为什么在不需要时使用lodash(并且可以使用单个reduce
编写功能代码)?
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));
答案 2 :(得分:1)
您可以type
方向desc
进行排序:
var res = _.orderBy(items, ['type'], ['desc']);
或使用partition
var res = _.chain(items)
.partition({type: 'vegetable'})
.flatten()
.value();