Javascript 从json排序数据

Javascript 从json排序数据,javascript,json,sorting,Javascript,Json,Sorting,我有这样的代码 var a = JSON.parse(data); var result = "<table><tr><th></th></tr>"; for (i = 0; i < a.DATA.length; i++) { var test = a.DATA[i][0]; result += "<tr'><td>" + test + "</td&

我有这样的代码

var a = JSON.parse(data);
var result = "<table><tr><th></th></tr>";
for (i = 0; i < a.DATA.length; i++) {
  var test = a.DATA[i][0];                      
  result += "<tr'><td>" + test + "</td></tr>";
}
result += "</table>"
$(".show").html(result);
但我需要有文件夹(test_folder1,test_folder2)和每个未来的文件夹排序在其他带有后缀的文件之前


谢谢。

要使用文件名/目录名对数组排序,您可以尝试:

var data = ['e_file.xlsx', 'p_image.png', 'test2.docx', 'test_folder1', 'test_folder2', 'text_file.txt'];

var sorted = data.sort(function(a, b){
  var pattern = /\.[a-z]+$/i,
      isADir  = !pattern.test(a),
      isBDir  = !pattern.test(b);

  if (isADir && !isBDir) return -1;
  if (isBDir && !isADir) return 1;

  return a > b;
});
输出:

["test_folder1", "test_folder2", "e_file.xlsx", "p_image.png", "test2.docx", "text_file.txt"]

解决方案将是对hsz的答案提出异议

差异基于您使用的json数据。通常,如果它是一个字符串数组(如hsz示例中所示),则可以逐个直接访问。 对于使用的json,您必须首先提取“数据”部分,方法如下:
alldata[“DATA”]
,然后在排序函数中,而不是直接与“a”和“b”进行比较,您必须确定要比较的值,因为数据数组的每个元素都是另一个数组,这就是我们使用“a[0]”和“b[0]”访问它们的原因

为了解决这个问题,您可以继续使用hsz的解决方案,但是您的文件夹元素在第二个值中有“
”作为字符串,因此您可以使用它来区别对待它们

两种解决方案都可以

var alldata={ "ERROR": "-", "DATA": [[ "e_file.xlsx", "8759"], ["test2.docx", "23794"], ["test_folder1", "<dir>"], ["test_folder2", "<dir>"], ["p_image.png", "2115194"], ["text_file.txt", "19"]]} 

try{

data=alldata["DATA"];
data.sort(function(a,b)
       {
/*  
         //THIS WOULD BE HSZ'S ANSWER
          var pattern = /\.[a-z]+$/i,
      isADir  = !pattern.test(a[0]),
      isBDir  = !pattern.test(b[0]);

  if (isADir && !isBDir) return -1;
  if (isBDir && !isADir) return 1;

  return a[0] > b[0];
    */       

           if (a[1]=="<dir>" && b[1]!="<dir>") return -1;
            if (a[1]!="<dir>" && b[1]=="<dir>") return 1;


            return a[0] > b[0];

});


    var result = "<table><tr><th></th></tr>";
for (i = 0; i < data.length; i++) {
  var test = data[i][0];                      
  result += "<tr'><td>" + test + "</td></tr>";
}
result += "</table>"

}
catch(e){
alert(e);
}
$(".show").html(result);
var alldata={“ERROR”:“-”,“DATA”:[[“e_file.xlsx”,“8759”],[“test2.docx”,“23794”],[“test_folder1”,“”],[“test_folder2”,“”],[“p_image.png”,“2115194”],[“text_file.txt”,“19”]}
试一试{
数据=所有数据[“数据”];
数据排序(函数(a,b)
{
/*  
//这将是HSZ的答案
变量模式=/\[a-z]+$/i,
isADir=!pattern.test(a[0]),
isBDir=!pattern.test(b[0]);
if(isADir&&!isBDir)返回-1;
if(isBDir&!isADir)返回1;
返回a[0]>b[0];
*/       
如果(a[1]=“”&b[1]!=“”)返回-1;
如果(a[1]!=”&&b[1]=”)返回1;
返回a[0]>b[0];
});
var结果=”;
对于(i=0;i结果+=“您能发布
数据
值吗?首先,您需要显示JSON数据;第二,
标记序列不正确。无法将其嵌套到TR中…您必须将所有JSON数据循环到一个数组中,并对其进行排序,然后显示它。感谢您的所有回答。我将尝试它。对于完成数据,如下所示:{“错误”:“-,”数据“:[“e_file.xlsx”,“8759”],[“test2.docx”,“23794”],[“test_folder1”,“”],[“test_folder2”,“”],[“p_image.png”,“2115194”],[“text_file.txt”,“19”]}当我尝试此FireBug报告时:TypeError:DATA.sort不是函数。
var alldata={ "ERROR": "-", "DATA": [[ "e_file.xlsx", "8759"], ["test2.docx", "23794"], ["test_folder1", "<dir>"], ["test_folder2", "<dir>"], ["p_image.png", "2115194"], ["text_file.txt", "19"]]} 

try{

data=alldata["DATA"];
data.sort(function(a,b)
       {
/*  
         //THIS WOULD BE HSZ'S ANSWER
          var pattern = /\.[a-z]+$/i,
      isADir  = !pattern.test(a[0]),
      isBDir  = !pattern.test(b[0]);

  if (isADir && !isBDir) return -1;
  if (isBDir && !isADir) return 1;

  return a[0] > b[0];
    */       

           if (a[1]=="<dir>" && b[1]!="<dir>") return -1;
            if (a[1]!="<dir>" && b[1]=="<dir>") return 1;


            return a[0] > b[0];

});


    var result = "<table><tr><th></th></tr>";
for (i = 0; i < data.length; i++) {
  var test = data[i][0];                      
  result += "<tr'><td>" + test + "</td></tr>";
}
result += "</table>"

}
catch(e){
alert(e);
}
$(".show").html(result);