Javascript 将对象转换为数组以便对其进行排序?

Javascript 将对象转换为数组以便对其进行排序?,javascript,Javascript,我在HTML表中列出了一个对象。但我希望能够单击此表中的不同列,根据该字段对数据进行“排序” 因为我知道对象没有排序,所以我需要将其转换为数组,如何?然后我使用href links调用排序函数,在重新填充表之前对数组进行排序 希望有人能解释我是怎么做的 这基本上就是我取得的成绩: $get = mysql_query("SELECT * FROM game_buildings") or die(mysql_error()); $i = 0; while($row

我在HTML表中列出了一个对象。但我希望能够单击此表中的不同列,根据该字段对数据进行“排序”

因为我知道对象没有排序,所以我需要将其转换为数组,如何?然后我使用href links调用排序函数,在重新填充表之前对数组进行排序

希望有人能解释我是怎么做的

这基本上就是我取得的成绩:

$get = mysql_query("SELECT * FROM game_buildings") or die(mysql_error());
        $i = 0;
        while($row = mysql_fetch_assoc($get)){
            $data[$i][0] = $row['name'];
            $data[$i][1] = $row['id'];
            $i ++;
            }
$data = json_encode($data);
?>
<script>var data = <?echo $data; ?>; </script>
$get=mysql\u query(“从游戏建筑中选择*”)或die(mysql\u error());
$i=0;
while($row=mysql\u fetch\u assoc($get)){
$data[$i][0]=$row['name'];
$data[$i][1]=$row['id'];
$i++;
}
$data=json_encode($data);
?>
var数据=;
然后表格:

<table id="list" style="width:70%;margin: 0 auto;" border="1">
    <tr>
  <td align="center">
        <a href="#" onclick='javascript:sort('name')'>Name</a>
      </td>
  <td align="center">
        <a href="#" onclick='javascript:sort('type')'>Type</a>
      </td>
    </tr>

<script>
  for(var key in data){
    result += '<tr><td>'+data[key][0]+'</td><td>'+data[key][1]+'</td></tr>';
  }
    document.getElementById('list').innerHTML += result;
</script>


</table>

for(var输入数据){
结果+=''+数据[键][0]+''+数据[键][1]+'';
}
document.getElementById('list').innerHTML+=result;

一个简单的for循环怎么样

var arr = [];
for (var key in data) {
    arr.push(data[key]);
}
现在使用自定义排序函数对其进行排序(在本例中按名称排序):

arr.sort(函数(a,b){
如果(a[0]==b[0]){
返回0;
}else如果(a[0]
一个简单的for循环怎么样

var arr = [];
for (var key in data) {
    arr.push(data[key]);
}
现在使用自定义排序函数对其进行排序(在本例中按名称排序):

arr.sort(函数(a,b){
如果(a[0]==b[0]){
返回0;
}else如果(a[0]
数据
应该已经是一个数组。您可以通过检查
json\u encode($data)
的输出来验证这一点:

您可以通过保持
mysql\u fetch\u assoc
结构来改变这一点:

while($row = mysql_fetch_assoc($get)){
    $data[] = $row;
}
至少在理论上,JavaScript的输出是:

<script>var data = [{"name":"foo","id":1,"type":...},...];</script>
更新表的一种方法是删除旧行并追加新行(代替上面的
/…
):


数据
应该已经是一个数组。您可以通过检查
json\u encode($data)
的输出来验证这一点:

您可以通过保持
mysql\u fetch\u assoc
结构来改变这一点:

while($row = mysql_fetch_assoc($get)){
    $data[] = $row;
}
至少在理论上,JavaScript的输出是:

<script>var data = [{"name":"foo","id":1,"type":...},...];</script>
更新表的一种方法是删除旧行并追加新行(代替上面的
/…
):


我的不如其他的好:


这本可以做得更好,但我不太擅长javascript,我的不如其他人:



它可以做得更好,但我不太擅长javascript

如果您使用jQuery,则此操作有
$.makeArray()
。不,我不喜欢使用库:)如果您使用jQuery,此操作有
$.makeArray()
。不,我不喜欢使用库:)我如何构造循环以将其添加到“result”变量?执行一个简单的for循环:
for(var key=0;key
-其余保持不变。如下所示:for(var key=0;keyresult+='+arr[key][0]+'+arr[key][1]+“”;如何调用函数将不会自动运行arr.sort?如何构造循环以将其添加到“result”变量?执行一个简单的for循环:
for(var key=0;key
-其余保持不变。如下所示:for(var key=0;keyresult+='+arr[key][0]+'+arr[key][1]+';如何调用函数不会自动运行arr.sort?我的onclick函数如何工作-我调用sort('something'))在url中?@Dave是否尝试在服务器端对其排序,是否使用
?sort=name
查询重新请求页面,或在DOM中对客户端表行重新排序?我希望它是客户端的-查询不会对其排序。@Dave在这种情况下,一种可能的方法是从DOM中删除旧行并替换它们。请参阅我的编辑以获取示例le(虽然使用的是“id”而不是“类型”)。您可能还想看看如何使用“表排序”或@Dave Change
sort(0)
sort(6)
onclick
属性中选择
sort('name')
sort('type'))
。您还可以考虑创建一个
,并将其作为删除/追加行的焦点:。我的onclick函数如何工作-我调用sort('something'))在url中?@Dave是否尝试在服务器端对其排序,是否使用
?sort=name
查询重新请求页面,或在DOM中对客户端表行重新排序?我希望它是客户端的-查询不会对其排序。@Dave在这种情况下,一种可能的方法是从DOM中删除旧行并替换它们。请参阅我的编辑以获取示例le(虽然使用的是“id”而不是“类型”)。您可能还想看看如何使用“表排序”或@Dave Change
sort(0)
sort(6)
onclick
属性中选择
sort('name')
sort('type'))
。您还可以考虑创建一个
,并将其作为删除/追加行的焦点:。
function sort(key) {
    data = data.sort(function (a, b) {
        var A = a[key], B = b[key];

        if (A < B)
            return -1;
        if (A > B)
            return 1;

        return 0;
    });

    // ...
}
var table = document.getElementById('list');
var oldRows = [].slice.call(table.rows, 1); // 1 = skip the "header" row(s)

for (var r = 0, l = oldRows.length; r < l; r++) {
    oldRows[r].parentNode.removeChild(oldRows[r]);
}

for (var i = 0, l = data.length; i < l; i++) {
    table.innerHTML += '<tr><td>' + data[i].name + '</td><td>' + data[i].id + '</td></tr>';
}
window.onload = function () {
    sort('name');
};