我有一个多维数组,它在页面加载时在 jQuery AJAX 调用中内置,名为 sumArr
。
$( document ).ready( function() {
...
$.ajax({
type: 'GET',
url: 'models/table.php',
mimeType: 'json',
success: function(data) {
var sumCount = 0;
var sumArr = [];
$( "#sum-body" ).empty();
$.each(data, function(i, data) {
sumArr.push([
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6],
data[7],
data[8],
data[9]
]);
var body = "<tr class='clickable-row'>";
body += "<td>" + data[0] + "</td>";
body += "<td>" + data[1] + "</td>";
body += "<td>" + data[2] + "</td>";
body += "<td>" + data[3] + "</td>";
body += "<td>" + data[4] + "</td>";
body += "<td>" + data[5] + "</td>";
body += "<td>" + data[6] + "</td>";
body += "<td>" + data[7] + "</td>";
body += "<td>" + data[8] + "</td>";
body += "<td>" + data[9] + "</td>";
body += "</tr>";
$( body ).appendTo( $( "#sum-body" ) );
sumCount = sumCount + 1;
});
console.log(sumArr);
});
...
});
我有另一个函数,然后尝试重新排序数组。我最终将在 HTML 页面上显示该数组。
function compareCols(arr, cols) {
arr.sort(function (a, b) {
console.log("comparing " + a[cols] + ", " + b[cols]);
if (a[cols] > b[cols]) {
return 1;
}
if (a[cols] < b[cols]) {
return -1;
}
return 0;
});
}
compareCols('sumArr', 0);
console.log(sumArr);
当我的页面加载时,我收到以下错误:
未捕获类型错误:arr.sort 不是函数
这令人困惑,因为我有一个更简单的代码版本作为示例,可以正常工作。见下文:
var items = [
['Edward', 21],
['Sharpe', 37 ],
['And', 45 ],
['The', -12 ],
['Magnetic', 0 ],
['Zeros', 37 ]
];
function compareCols(arr, cols) {
arr.sort(function (a, b) {
console.log("comparing " + a[cols] + ", " + b[cols]);
if (a[cols] > b[cols]) {
return 1;
}
if (a[cols] < b[cols]) {
return -1;
}
return 0;
});
}
compareCols(items, 0);
console.log(items);
我似乎找不到这段代码哪里出了问题。任何人都可以发现错误在哪里吗?我梳理了代码,但找不到任何东西。我猜这与 AJAX 有关,但不确定。我最初将数组作为对象,但将其更改为一个或多个数组。
最佳答案
这里有两个问题:
- 调用compareCols('sumArr', 0);时应按照 kurt 在评论中的建议删除引号。
- 但更大的问题是 sumArr 可能没有定义为全局变量。
- 仅在成功的 ajax 调用后才需要调用compareCols。
- 确保删除 ajax 部分中的 var,以便 sumArr = [] 引用全局变量。
关于javascript - 使用 AJAX/Javascript/jQuery 构建和重新排序多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405987/