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);