按对象名称类型脚本

时间:2019-05-08 15:43:40

标签: javascript arrays typescript object

使用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));

我知道这行不通,因为要调用数组中的名字键,我可以执行以下操作:

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));

我正在尝试使其按字母顺序排序以成为:

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)根据对象的实际名称进行排序?

谢谢。

3 个答案:

答案 0 :(得分:1)

当您拥有这样的对象时:

df

第一个字符串是属性名称。 即要获取值,您必须编写类似以下内容的

print(df)
#    0     1     2     3     4     5     6   7  8  9   10   11
#0  12  13.0  13.0  13.4  13.4  12.4  12.4  16  0  0  0.0  0.0
#1  14  12.2  12.2  13.4  13.4  12.6  12.6  19  5  5  6.7  6.7

这给您带来了一个问题,因为您事先不知道要排序的对象中唯一键的名称。

但是您可以使用let o = {"Project Report": {name: "Project Report", docType: "Project"}} 向对象询问其键:

o["Project Report"].name // => "Project Report"

并且由于您知道列表中每个对象仅具有键,因此您可以编写如下内容:

Object.keys()

答案 1 :(得分:0)

要回答您的问题,您可以通过调用获取第一个可枚举密钥的kMDItemTextContent来获取对象密钥。由于这些对象中的每个对象只有一个键值对,因此可以正常工作。如果添加第二个键值对,则将无法使用。

那么,我的下一个问题是为什么对象首先处于这种配置中?考虑到对象键只是重复的Object.keys(obj)[0]值,我认为仅包含对象的数组会更有意义,不是吗?我不确定将每个对象嵌套在另一个对象中会得到什么。

答案 2 :(得分:0)

那是一个奇怪的对象结构。

您可以做到-但是您需要弄清楚该属性的访问者应该是什么。如何定义每个对象的键?

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

const accessSortingKey(object: Object): string {
    const key = Object.keys(object)[0];
    return key;
} 

const weirdArray = [
    {"Project Report": {name: "Project Report", docType: "Project"}},
    {"Department Report": {name: "Department Report", docType: "Department"}},
    {"Room Report": {name: "Room Report", docType: "Room"}}
];

weirdArray.sort((a, b) => {
   const aVal = accessSortingKey(a);
   const bVal = accessSortingKey(b);

   return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;

});