我想想出一个好方法来为如何在 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)
我想首先向用户展示最重要的结果,但这些字段中的每一个可能并不总是返回。因此,我希望最重要的(由用户在其他一些代码中确定)在可用时首先显示。
这样的事情应该工作:
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,你当然可以使用。
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |