javascript - 使用 AJAX/Javascript/jQuery 构建和重新排序多维数组

标签 javascript jquery arrays ajax sorting

我有一个多维数组,它在页面加载时在 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 有关,但不确定。我最初将数组作为对象,但将其更改为一个或多个数组。

最佳答案

这里有两个问题:

  1. 调用compareCols('sumArr', 0);时应按照 kurt 在评论中的建议删除引号。
  2. 但更大的问题是 sumArr 可能没有定义为全局变量。
  3. 仅在成功的 ajax 调用后才需要调用compareCols。
  4. 确保删除 ajax 部分中的 var,以便 sumArr = [] 引用全局变量。

关于javascript - 使用 AJAX/Javascript/jQuery 构建和重新排序多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405987/

相关文章:

PHP jQuery MySQL 即时刷新

javascript - 防止 body 标签在模态打开时滚动

javascript - 存在滚动条时,如何将元素放置在页面上最低到达 DIV 下方 40 像素处?

jquery - 删除单击的克隆 div

javascript - jQuery Animate() 和 BackgroundColor

arrays - 读取未知形状的多维数组

c - C语言计算字符串中大小写字母的程序

javascript - 从 MySQL 导出到 PHP 中的对象数组,然后导出到 JavaScript

javascript - 如何在angularjs中逐行折叠

php - 更改 facebook 评论代码中的 url?