【发布时间】:2014-05-01 12:08:08
【问题描述】:
给定这个数据结构:
var set = [
{
"name":"alpha",
"require":[]
},
{
"name":"beta",
"require":["echo"]
},
{
"name":"charlie",
"require":[]
},
{
"name":"delta",
"require":["charlie", "beta"]
},
{
"name":"echo",
"require":[]
}
];
项目应根据可能的多个要求进行排序,其中要求的项目应低于所需属性中的所有项目。上述示例数据的一个可能输出是:
alpha, charlie, echo, beta, delta
我了解有一个 Array.sort 方法https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort,但我不了解基于多个要求进行排序的算法。
正如我以前做过的那样:
set.sort(function (a, b) {
return a.name > b.require[0] ? 1 : -1;
});
-- 编辑@hindmost 答案--
虽然这得到了预期的输出,但它并没有按预期工作。考虑这组新的样本数据:
var set = [
{
"name":"zzz",
"require":["xxx"]
},
{
"name":"xxx",
"require":["yyy"]
},
{
"name":"fff",
"require":[]
},
{
"name":"yyy",
"require":["fff", "kkk"]
},
{
"name":"kkk",
"require":[]
}
];
结果:
fff, kkk, xxx, zzz, yyy
预期:
fff, kkk, yyy, xxx, zzz
说明:排序不是基于字母名称顺序或需要数组长度,但如果 yyy 需要 fff 和 kkk,则 yyy 必须在数组中的后面,然后是 fff 和 kkk。其中zzz需要xxx,xxx需要yyy,那么xxx必须在yyy之后,zzz必须在xxx之后。
【问题讨论】:
标签: javascript arrays sorting object