Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按嵌套特性的值对对象特性进行排序_Javascript_Jquery_Sorting - Fatal编程技术网

Javascript 按嵌套特性的值对对象特性进行排序

Javascript 按嵌套特性的值对对象特性进行排序,javascript,jquery,sorting,Javascript,Jquery,Sorting,我目前正在尝试根据属性值对对象属性进行排序,若这样做有意义的话 var obj = { 1: { name: "Mike", surname: "Smith"}, 2: { name: "Albert", surname: "Einstein"}, 3: { name: "Steve", surname: "Jobs"} } 假设我想按姓氏对这些属性的顺序进行排序,因此最终结果是 var obj = { 2: { name: "Albert", surnam

我目前正在尝试根据属性值对对象属性进行排序,若这样做有意义的话

var obj = { 
    1: { name: "Mike", surname: "Smith"},
    2: { name: "Albert", surname: "Einstein"},
    3: { name: "Steve", surname: "Jobs"}
}
假设我想按姓氏对这些属性的顺序进行排序,因此最终结果是

var obj = { 
    2: { name: "Albert", surname: "Einstein"},
    3: { name: "Steve", surname: "Jobs"},
    1: { name: "Mike", surname: "Smith"}
}
当然,除了将所有姓氏放入数组进行排序,然后重建对象之外,还必须有一种优雅的方法来实现这一点。

请尝试以下代码:

var-arr=[
{
f_名称:“乔治”,
l_名称:“华盛顿”,
年龄:279
},
{
f_名称:“亚伯拉罕”,
l_名称:“林肯”,
年龄:202
},
{
f_名称:“巴拉克”,
l_名称:“奥巴马”,
年龄:50
}
];
$(函数(){
$('#标题th')。单击(函数(){
var id=$(this.attr('id');
var asc=(!$(this).attr('asc');//切换顺序,如果未设置,则为true
//按升序排序时设置asc=“asc”
$('#标题th')。每个(函数(){
$(this.removeAttr('asc');
});
if(asc)$(this.attr('asc','asc');
排序结果(id,asc);
});
showResults();
});
功能排序结果(道具、asc){
arr=arr.sort(函数(a,b){
如果(asc)返回(a[prop]>b[prop]);
否则返回(b[prop]>a[prop]);
});
showResults();
}
函数showResults(){
var html='';
对于(arr中的var e){
html+=''
+''+arr[e].f_name+''
+''+arr[e].l_name+''
+''+arr[e].年龄+''
+'';
}
$('#results').html(html);
}
表格{
保证金:3倍;
}
表th{
字体大小:粗体;
光标:指针;
}
表th、表td{
填充:3倍;
边框:1px实心#000;
}

单击表格标题对结果进行排序。
名字
姓
年龄
请尝试以下代码:

var-arr=[
{
f_名称:“乔治”,
l_名称:“华盛顿”,
年龄:279
},
{
f_名称:“亚伯拉罕”,
l_名称:“林肯”,
年龄:202
},
{
f_名称:“巴拉克”,
l_名称:“奥巴马”,
年龄:50
}
];
$(函数(){
$('#标题th')。单击(函数(){
var id=$(this.attr('id');
var asc=(!$(this).attr('asc');//切换顺序,如果未设置,则为true
//按升序排序时设置asc=“asc”
$('#标题th')。每个(函数(){
$(this.removeAttr('asc');
});
if(asc)$(this.attr('asc','asc');
排序结果(id,asc);
});
showResults();
});
功能排序结果(道具、asc){
arr=arr.sort(函数(a,b){
如果(asc)返回(a[prop]>b[prop]);
否则返回(b[prop]>a[prop]);
});
showResults();
}
函数showResults(){
var html='';
对于(arr中的var e){
html+=''
+''+arr[e].f_name+''
+''+arr[e].l_name+''
+''+arr[e].年龄+''
+'';
}
$('#results').html(html);
}
表格{
保证金:3倍;
}
表th{
字体大小:粗体;
光标:指针;
}
表th、表td{
填充:3倍;
边框:1px实心#000;
}

单击表格标题对结果进行排序。
名字
姓
年龄

您需要的是一个具有顺序的对象。可以是
数组
映射

然后,您需要考虑您的数据模式(即从服务器发出的JSON数据的形状)。我可能会将ID移动到对象本身中(另一种方法是使其隐式,这很容易出错)

在这一点上,这只是一个排序问题

数组
具有

注意:如果需要执行到数组的转换,可以使用
数组。从

var obj={
1:{姓名:“迈克”,姓氏:“史密斯”},
2:{姓名:“阿尔伯特”,姓氏:“爱因斯坦”},
3:{姓名:“史蒂夫”,姓氏:“乔布斯”},
长度:4//最大*从零开始*索引
};

console.log(Array.from(obj))您需要的是一个具有顺序的对象。可以是
数组
映射

然后,您需要考虑您的数据模式(即从服务器发出的JSON数据的形状)。我可能会将ID移动到对象本身中(另一种方法是使其隐式,这很容易出错)

在这一点上,这只是一个排序问题

数组
具有

注意:如果需要执行到数组的转换,可以使用
数组。从

var obj={
1:{姓名:“迈克”,姓氏:“史密斯”},
2:{姓名:“阿尔伯特”,姓氏:“爱因斯坦”},
3:{姓名:“史蒂夫”,姓氏:“乔布斯”},
长度:4//最大*从零开始*索引
};

console.log(Array.from(obj))
可以使用可排序的数组,但不能使用实际不可排序的对象。@NinaScholz您的意思是:可以使用可排序的数组,但不能使用实际不可排序的
对象。@ozil,这是一个输入错误。它的ID实际上来自数据库,因此这些ID可能会更改为任何内容。你可以使用一个可排序的数组,但不能使用一个实际上不可排序的对象。@NinaScholz你的意思是:你可以使用一个可排序的数组,但不能使用一个实际上不可排序的
对象。
。可能是@ozil的重复,这是一个输入错误。它的ID实际上来自数据库,所以这些可能会更改为任何内容。这段代码可以工作,但仍然依赖于原始变量作为数组,我实际上使用angularJS并尝试在这个对象上使用ng repeat,我知道它只适用于数组。这段代码可以工作,但仍然依赖于原始变量作为数组,我实际上在使用angularJS,并试图在这个对象上使用ng repeat,我知道它只适用于
[
  {
    "id": 1,
    "name": "Fred", 
    ...
  }
]