Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按双嵌套值对JSON数组排序?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 按双嵌套值对JSON数组排序?

Javascript 按双嵌套值对JSON数组排序?,javascript,jquery,json,Javascript,Jquery,Json,我无法找到合理的解决方案,因为我正在从firebase提取JSON数据,并将其从node.js提取到html文件中。我想通过一个名为value的属性对数据进行排序,因为我不知道如何访问JQuery中要排序的子值,我想知道是否有人能帮我找到正确的方向 { key: "a", { key: "ab", { value: 2 } key: "ac", {

我无法找到合理的解决方案,因为我正在从firebase提取JSON数据,并将其从node.js提取到html文件中。我想通过一个名为value的属性对数据进行排序,因为我不知道如何访问JQuery中要排序的子值,我想知道是否有人能帮我找到正确的方向

{
    key: "a",
    {
         key: "ab",
         {
               value: 2
         }
         key: "ac",
         {
               value: 0
         }
    }
},
    {
    key: "b",
    {
         key: "bb",
         {
               value: 1
         }
    }
},
输出:

[{ac}, {bb}, {ab}]

在JSON和JavaScript语法中,您的输入和所需的输出都是用无效的符号表示的,因此我必须做出一些假设

您可以使用这个递归函数,它将查找所有嵌套的值属性,并收集这些值以及它们所在的父属性的名称。最后,对数据父键和值对进行排序:

函数collectValuesobj,名称{ return Object.entriesobj.reduce acc,[键,值]=>{ 根据concat返回 //递归地查看嵌套对象: Objectvalue==值?collectValuesvalue,键 //否则,当key为“value”时,收集该对象 :key==“value”?[[名称,值]] //否则忽略此值 : [] }, []; } //样本输入 变量输入=[{ a:{ ab:{ 价值:2 }, ac:{ 数值:0 } } }, { b:{ bb:{ 价值:1 } } }]; var result=collectValuesinput.sort a,b=>a[1]-b[1];
console.logresult 从原始图像模拟JSON:

风险值数据={ 关键1:{ 答:{deliveryshort:12152017}, b:{deliveryshort:10122015}, c:{deliveryshort:11302016}, d:{deliveryshort:09022014} }, 关键2:{ 答:{deliveryshort:10102017}, b:{deliveryshort:09102017} }, }; 函数parsedatestr{ var month=+dateStr[0]+dateStr[1]; var day=+dateStr[2]+dateStr[3]; var year=+dateStr[4]+dateStr[5]+dateStr[6]+dateStr[7]; var结果=新日期年、月、日; 返回结果; } 函数sortBydata、属性、转换器{ var j=新数组; 对于数据中的var项{ j、 推送[项目,数据[项目],转换器数据[项目][属性]; } j、 sort函数a,b{返回a[2]-b[2]}; 返回j; } 函数sortDatadata{ var d={}; 对于数据中的var项{ var sorted=sortBydata[item],deliveryshort,函数a{return parseDatea;}; /*var归一化=新数组; 对于变量i=0;iSortData;1提供文本格式的示例输入,而不是图像。2提供该样本数据的预期输出。3您的示例数据中似乎没有数组,而且对象属性本质上没有排序,因此似乎没有什么可排序的。@trincot抱歉,我刚刚意识到数组对象与从JSON中提取的对象不同。我现在将其转换为一个数组。我将更新1和2的问题您的输入没有有效语法。它是对象和数组表示法的不兼容混合。具有嵌套对象值的属性的名称是什么?如果您在编写正确的表示法时遇到困难,请输出JSON.stringifymyobject,null,2并将该输出粘贴到您的问题中。此外,所需的输出是无效的表示法。哇,感谢您提供了如此惊人的解决方案,如果我不熟悉JavaScript的礼节,无法正确表达我的想法,我很抱歉,但是你的代码给了我理解各种排序问题所需的起点。