在JavaScript中根据数组的索引对对象排序?

在JavaScript中根据数组的索引对对象排序?,javascript,arrays,sorting,lodash,Javascript,Arrays,Sorting,Lodash,好的,那么给定这个输入(为了简洁起见,其他属性已被剥离): 我想按另一个数组的索引对它们进行排序,如果它们不在该数组中,请按字母顺序排序 var list = ['Jake', 'Michael', 'Liam']; 给我一个输出: Jake, Michael, Liam, Adam, Dave 我尝试过使用lo dash,但不太正确: names = _.sortBy(names, 'name'); names = _.sortBy(names, function(name) {

好的,那么给定这个输入(为了简洁起见,其他属性已被剥离):

我想按另一个数组的索引对它们进行排序,如果它们不在该数组中,请按字母顺序排序

var list = ['Jake', 'Michael', 'Liam'];
给我一个输出:

Jake, Michael, Liam, Adam, Dave
我尝试过使用lo dash,但不太正确:

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

任何帮助都将不胜感激

你很接近<代码>返回(索引==-1)-指数: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;
});

为什么
Adam
然后
Dave
,您是如何排序的?我希望您知道javascript中有一个名为sort()的函数,它可以按字母顺序对数组排序!那么现在的问题是将元素移动到另一个数组中?list.sort();将输出亚当,戴夫,杰克,迈克尔,Liam@elclanrs-“如果它们不在该数组中,则按字母顺序排序”,因此,在其他术语中,整个数组按字母顺序排序,但如果这有意义,则这三个键将排在第一位。是的,我知道
sort()
,尽管我已经在项目中使用了lodash,所以对我来说使用原生方法而不是(在我看来,更简洁的)lodash方法并不重要。效果很好。谢谢你的解释。:-)
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;
});