按首选顺序对数组进行排序

Gol*_*wby 5 javascript jquery

我想想出一个好方法来为如何在 javascript 中对数组进行排序提供一个“建议”的顺序。

所以说我的第一个数组看起来像这样:

['bob','david','steve','darrel','jim']
Run Code Online (Sandbox Code Playgroud)

现在我关心的是排序结果按以下顺序开始:

['jim','steve','david']
Run Code Online (Sandbox Code Playgroud)

之后,我希望剩余的值以其原始顺序显示。

所以我希望结果是:

['jim','steve','david','bob','darrel']
Run Code Online (Sandbox Code Playgroud)

我有一个正在与之通信的 API,我想在顶部的列表中显示对我很重要的结果。在那之后,我希望它们只是按原始顺序返回。

如果这可以通过像 jQuery 这样的 javascript 框架轻松完成,我也想听听。谢谢!

为清楚起见编辑:

我想假设不能保证我要排序的数组中提供的值。

因此,在原始示例中,如果提供的是:

['bob','steve','darrel','jim']
Run Code Online (Sandbox Code Playgroud)

我想按以下方式排序:

['jim','steve','david']
Run Code Online (Sandbox Code Playgroud)

由于 'david' 不在提供的数组中,我希望结果排除它。

Edit2 更清晰:我试图完成的一个实际例子:

API 将返回如下内容:

['Load Average','Memory Usage','Disk Space']
Run Code Online (Sandbox Code Playgroud)

我想首先向用户展示最重要的结果,但这些字段中的每一个可能并不总是返回。因此,我希望最重要的(由用户在其他一些代码中确定)在可用时首先显示。

nnn*_*nnn 6

这样的事情应该工作:

var presetOrder = ['jim','steve','david']; // needn't be hardcoded

function sortSpecial(arr) {
   var result = [],
       i, j;
   for (i = 0; i < presetOrder.length; i++)
      while (-1 != (j = $.inArray(presetOrder[i], arr)))
         result.push(arr.splice(j, 1)[0]);
   return result.concat(arr);
}

var sorted = sortSpecial( ['bob','david','steve','darrel','jim'] );
Run Code Online (Sandbox Code Playgroud)

我允许“特殊”值在正在处理的数组中出现不止一次,并假设只要按照presetOrder.

注意:我使用了jQuery,$.inArray()Array.indexOf()不仅仅是因为 IE9 之前 IE 不支持后者,并且您已经用“jQuery”标记了您的问题。.indexOf()如果你不关心旧的 IE,或者如果你使用shim,你当然可以使用。