http://jsfiddle.net/dactivo/tGbYq/
Решение будет развилка на ответ HSZ в.
Разница основана на данных json, которые вы используете. Обычно, если это был массив строк, как в примере hsz, вы получаете доступ напрямую по одному. С использованием json вы должны сначала извлечь часть «DATA» следующим образом: alldata["DATA"]
, а затем в функции сортировки вместо сравнения непосредственно с «a» и «b» вы должны установить, какое значение сравнить , потому что каждый элемент массива DATA является другим массивом, поэтому мы обращаемся к ним с помощью «a [0]» и «b [0]».
Чтобы решить эту проблему, вы можете продолжать использовать решение hsz, но ваши элементы папок имеют «<dir>
» как строку во втором значении, поэтому вы можете использовать это, чтобы обрабатывать их по-разному.
Оба решения в порядке.
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);
Можете ли вы поместить значение 'data'? – hsz
Во-первых, вам нужно показать данные JSON; 2, неправильная последовательность тегов '
Вам нужно будет перебрать все данные JSON в массив и отсортировать его, а затем отобразить. – techouse