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