Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 按对象名称Typescript对对象数组进行排序_Javascript_Arrays_Typescript_Object - Fatal编程技术网

Javascript 按对象名称Typescript对对象数组进行排序

Javascript 按对象名称Typescript对对象数组进行排序,javascript,arrays,typescript,object,Javascript,Arrays,Typescript,Object,使用TypeScript,我试图按照实际对象的名称而不是对象键对对象数组进行排序。这些对象上也存在与实际对象同名的名称键。我想看看我的逻辑哪里出了问题。我尝试按对象的名称键进行排序,但没有成功 我尝试过以多种方式使用.sort()函数 示例数组如下所示: templateReports = [ {"Project Report": {name: "Project Report", docType: "Project"}}, {"Department Report": {name: "Depar

使用TypeScript,我试图按照实际对象的名称而不是对象键对对象数组进行排序。这些对象上也存在与实际对象同名的名称键。我想看看我的逻辑哪里出了问题。我尝试按对象的名称键进行排序,但没有成功

我尝试过以多种方式使用.sort()函数

示例数组如下所示:

templateReports = [

{"Project Report": {name: "Project Report", docType: "Project"}},
{"Department Report": {name: "Department Report", docType: "Department"}},
{"Room Report": {name: "Room Report", docType: "Room"}}

]

我尝试了以下方法:

templateReports.sort((a,b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0));
我知道这不起作用,因为要调用数组中的first name键,我可以执行以下操作:

console.log(templateReports[0]["Project Report"].name);
templateReports.sort((a,b) => (a[nameOfObject].name > b[nameOfNextObject].name) ? 1 : ((b[nameOfNextObject].name > a[nameOfObject].name) ? -1 : 0));
o["Project Report"].name // => "Project Report"
这将得到数组中第一个对象的名称值。因此,我知道我必须修改使用源函数的方式,使其类似于:

console.log(templateReports[0]["Project Report"].name);
templateReports.sort((a,b) => (a[nameOfObject].name > b[nameOfNextObject].name) ? 1 : ((b[nameOfNextObject].name > a[nameOfObject].name) ? -1 : 0));
o["Project Report"].name // => "Project Report"
我正试着让它按字母顺序排列成:

templateReports = [

{"Department Report": {name: "Department Report", docType: "Department"}},
{"Project Report": {name: "Project Report", docType: "Project"}},
{"Room Report": {name: "Room Report", docType: "Room"}}

]
我如何a)使用sort方法完成这项工作,或者b)根据对象的实际名称进行排序


谢谢。

要回答您的问题,您可以通过调用获取第一个可枚举密钥的
object.keys(obj)[0]
来获取对象密钥。因为这些对象中的每一个都只有一个键值对,所以这将很好地工作。如果添加第二个键值对,这将不起作用


那么,我的下一个问题是,为什么对象首先处于这种配置中?考虑到对象键只是重复的
名称
值,我认为只有对象数组才更有意义,不是吗?我不确定将每个对象嵌套在第二个对象中会带来什么好处。

要回答您的问题,可以通过调用获取第一个可枚举键的
object.keys(obj)[0]
来获取对象键。因为这些对象中的每一个都只有一个键值对,所以这将很好地工作。如果添加第二个键值对,这将不起作用


那么,我的下一个问题是,为什么对象首先处于这种配置中?考虑到对象键只是重复的
名称
值,我认为只有对象数组才更有意义,不是吗?我不确定将每个对象嵌套在第二个对象中会带来什么好处。

如果有这样的对象:

let o = {"Project Report": {name: "Project Report", docType: "Project"}}
function getName(o) {
    return Object.keys(o)[0];
}

templateReports.sort((first, second) => getName(first).localeCompare(getName(second)));

第一个字符串是属性名。 i、 e要获得值,您必须编写以下内容:

console.log(templateReports[0]["Project Report"].name);
templateReports.sort((a,b) => (a[nameOfObject].name > b[nameOfNextObject].name) ? 1 : ((b[nameOfNextObject].name > a[nameOfObject].name) ? -1 : 0));
o["Project Report"].name // => "Project Report"
这给您带来了一个问题,因为您事先不知道要排序的对象中唯一键的名称

但是您可以使用
object.keys()
,向对象请求其密钥:

既然您知道列表中每个对象只有一个键,您可以这样写:

let o = {"Project Report": {name: "Project Report", docType: "Project"}}
function getName(o) {
    return Object.keys(o)[0];
}

templateReports.sort((first, second) => getName(first).localeCompare(getName(second)));


当您有这样一个对象时:

let o = {"Project Report": {name: "Project Report", docType: "Project"}}
function getName(o) {
    return Object.keys(o)[0];
}

templateReports.sort((first, second) => getName(first).localeCompare(getName(second)));

第一个字符串是属性名。 i、 e要获得值,您必须编写以下内容:

console.log(templateReports[0]["Project Report"].name);
templateReports.sort((a,b) => (a[nameOfObject].name > b[nameOfNextObject].name) ? 1 : ((b[nameOfNextObject].name > a[nameOfObject].name) ? -1 : 0));
o["Project Report"].name // => "Project Report"
这给您带来了一个问题,因为您事先不知道要排序的对象中唯一键的名称

但是您可以使用
object.keys()
,向对象请求其密钥:

既然您知道列表中每个对象只有一个键,您可以这样写:

let o = {"Project Report": {name: "Project Report", docType: "Project"}}
function getName(o) {
    return Object.keys(o)[0];
}

templateReports.sort((first, second) => getName(first).localeCompare(getName(second)));


这是一个奇怪的对象结构

您可以这样做,但是您需要弄清楚属性的访问器应该是什么。如何定义每个对象的此键

您可以使用对象中的第一个键:(免责声明-这是可维护的吗?

const accessortingkey(object:object):字符串{
const key=Object.keys(Object)[0];
返回键;
} 
常量古怪数组=[
{“项目报告”:{name:“项目报告”,docType:“项目”},
{“部门报告”:{名称:“部门报告”,docType:“部门”},
{“房间报告”:{name:“房间报告”,docType:“房间”}
];
古怪数组.排序((a,b)=>{
const aVal=accessortingkey(a);
const bVal=访问排序键(b);
返回aVal>bVal?1:aVal

}))

这是一个奇怪的对象结构

您可以这样做,但是您需要弄清楚属性的访问器应该是什么。如何定义每个对象的此键

您可以使用对象中的第一个键:(免责声明-这是可维护的吗?

const accessortingkey(object:object):字符串{
const key=Object.keys(Object)[0];
返回键;
} 
常量古怪数组=[
{“项目报告”:{name:“项目报告”,docType:“项目”},
{“部门报告”:{名称:“部门报告”,docType:“部门”},
{“房间报告”:{name:“房间报告”,docType:“房间”}
];
古怪数组.排序((a,b)=>{
const aVal=accessortingkey(a);
const bVal=访问排序键(b);
返回aVal>bVal?1:aVal

}))

请发布您想要得到的结果。我通过以下操作实现了这一点:
this.templaterreports.sort((a,b)=>(Object.keys(a)[0]>Object.keys(b)[0])?1:((Object.keys(b)[0]>Object.keys(a)[0])?-1:0))请发布您想要得到的结果。我通过以下操作实现了这一点:
this.templaterreports.sort((a,b)=>(Object.keys(a)[0]>Object.keys(b)[0])?1:((Object.keys(b)[0]>Object.keys(a)[0])?-1:0)