Javascript 根据要在后面显示的必需项的数组对对象数组进行排序

Javascript 根据要在后面显示的必需项的数组对对象数组进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,鉴于此数据结构: var set = [ { "name":"alpha", "require":[] }, { "name":"beta", "require":["echo"] }, { "name":"charlie", "require":[] }, { "name":"delta", "require":

鉴于此数据结构:

var set = [
    {
        "name":"alpha",
        "require":[]
    },
    {
        "name":"beta",
        "require":["echo"]
    },
    {
        "name":"charlie",
        "require":[]
    },
    {
        "name":"delta",
        "require":["charlie", "beta"]
    },
    {
        "name":"echo",
        "require":[]
    }
];
应根据可能的多个require对项目进行排序,其中带有requires的项目应位于required属性中所有项目的下方。上述样本数据的可能输出为:

alpha, charlie, echo, beta, delta
我知道有一种Array.sort方法,但我不了解基于多个需求进行排序的算法

正如我以前所做的那样:

set.sort(function (a, b) {
    return a.name > b.require[0] ? 1 : -1;
});
--编辑@最后面的答案--

虽然这得到了预期的输出,但它并没有像预期的那样工作。考虑这组新的样本数据:

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之后。

尝试以下方法:

set.sort(function (a, b) {
    return a.require.length == b.require.length ?
        (a.name < b.name ? -1 : 1) :
        (a.require.length < b.require.length ? -1 : 1);
});
set.sort(函数(a,b){
返回a.require.length==b.require.length?
(a.name
说明


首先,我们通过
require
prop比较元素,并返回
-1
(1st<2nd)或
1
(1st>2nd)。其次,如果
require
的值相等,我们将通过
name
prop以类似的方式进行比较。

解释当然也会有帮助。问题更新为添加另一个示例、结果和进一步解释。实际上我误解了您的问题。因此,它无法通过数组的
排序
方法解决。这种情况下唯一的解决方案是使用递归