使用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)根据对象的实际名称进行排序?
谢谢。
答案 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;
});