使用jquery.Sort()以自定义方式进行排序

使用jquery.Sort()以自定义方式进行排序,jquery,Jquery,我有一份水果清单 var fruits = ["Banana", "Orange", "Apple", "Mango", "Pineapple"]; 我想使用jQuery.sort()对它们进行排序,方法是给出一组应放在第一位的值: var showFirst = ["Banana", "Apple", "Orange"] 其余的水果应按特定顺序添加到末尾 我可以使用fruits.sort()进行此操作并使其看起来像这样吗 fruits.sort(function (a, b) {

我有一份水果清单

var fruits = ["Banana", "Orange", "Apple", "Mango", "Pineapple"];
我想使用jQuery
.sort()
对它们进行排序,方法是给出一组应放在第一位的值:

var showFirst = ["Banana", "Apple", "Orange"]
其余的水果应按特定顺序添加到末尾

我可以使用
fruits.sort()
进行此操作并使其看起来像这样吗

    fruits.sort(function (a, b) {
        var customOrder = ["Banana", "Apple", "Orange"]
        {
            return ?;
        };
    });
结果应该是:
水果=[“香蕉”、“苹果”、“橘子”、“芒果”、“菠萝”]

如果你说,前三个之后的任何订单,那么你可以这样做:

function sort(arr) {
  // Always show these first.
  var showFirst = ["Banana", "Apple", "Orange"];
  // Create a return variable.
  var finalArray = [];
  // Loop through the showFirst to add the array elements if present.
  $.each(showFirst, function (i, v) {
    if ($.inArray(v, arr)) {
      // Push this to the final in the same order.
      finalArray.push(v);
      // Remove it from the original array.
      arr[i] = undefined;
    }
  });
  // After this add the rest.
  $.each(arr, function (i, v) {
    if (typeof v != "undefined")
      finalArray.push(v);
  });
  // Return the final array.
  return finalArray;
}

因此,上面的代码都有完整的文档记录。

使用sort,您可以简单地将indexOf
a
b
进行比较,但您必须单独检查-1。通过反转showfirst数组,可以直接使用排序:

var fruits = ["Banana", "Orange", "Apple", "Mango", "Pineapple"];

var showFirst = ["Banana", "Apple", "Orange"];
var sorter = showFirst.reverse();
fruits.sort(function (a, b) {
        return sorter.indexOf(b) -  sorter.indexOf(a);
});

如果在新列表中,
“香蕉”、“苹果”、“橘子”中的一个不存在怎么办?结果是什么?如果你所需要的唯一的“排序顺序”是你提到的三个项目,为什么要考虑使用“排序”?这几乎是我所需要的!唯一的一点是,当我在数组中有多个“香蕉”值时,我希望它们都显示在数组的开头。做了一个快速测试,似乎有效:除非我误解了意图?你是对的。它确实将所有showFirst值放在了开头。非常感谢。