Javascript 将对象转换为数组以便对其进行排序?
我在HTML表中列出了一个对象。但我希望能够单击此表中的不同列,根据该字段对数据进行“排序” 因为我知道对象没有排序,所以我需要将其转换为数组,如何?然后我使用href links调用排序函数,在重新填充表之前对数组进行排序 希望有人能解释我是怎么做的 这基本上就是我取得的成绩:Javascript 将对象转换为数组以便对其进行排序?,javascript,Javascript,我在HTML表中列出了一个对象。但我希望能够单击此表中的不同列,根据该字段对数据进行“排序” 因为我知道对象没有排序,所以我需要将其转换为数组,如何?然后我使用href links调用排序函数,在重新填充表之前对数组进行排序 希望有人能解释我是怎么做的 这基本上就是我取得的成绩: $get = mysql_query("SELECT * FROM game_buildings") or die(mysql_error()); $i = 0; while($row
$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 Changesort(0)
和sort(6)
在onclick
属性中选择sort('name')
和sort('type'))
。您还可以考虑创建一个
,并将其作为删除/追加行的焦点:。我的onclick函数如何工作-我调用sort('something'))在url中?@Dave是否尝试在服务器端对其排序,是否使用?sort=name
查询重新请求页面,或在DOM中对客户端表行重新排序?我希望它是客户端的-查询不会对其排序。@Dave在这种情况下,一种可能的方法是从DOM中删除旧行并替换它们。请参阅我的编辑以获取示例le(虽然使用的是“id”而不是“类型”)。您可能还想看看如何使用“表排序”或@Dave Changesort(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');
};