gpt4 book ai didi

javascript - 使用 localecompare typescript 处理 null

转载 作者:行者123 更新时间:2023-12-02 21:56:32 27 4
gpt4 key购买 nike

我有以下排序:

let sortedCon = this.con.sort((a, b) => a.lastname.localeCompare(b.lastname));

我试图让它处理空值并保持单行简单性。

我已经尝试过但不起作用:

let sortedCon = this.con.sort((a, b) => a ? a.lastname.localeCompare(b ? b.lastname : '') : 0);

我知道我很接近,但无法弄清楚。任何帮助将不胜感激。

最佳答案

没有最小的可重现示例,包括 this.con 的类型定义以及您希望看到的特定排序顺序(如果 this.con 的元素> 未定义,它应该在与空 lastname 定义的位置相同的位置排序吗?还是在其他地方?),很难确定,但假设它是这样的:

declare const con: Array<{
lastname?: string | null
} | null | undefined>;

然后您可以使用optional chainingnullish coalescing TypeScript 3.7 中引入的运算符可以获得以下一行:

con.sort((a, b) => (a?.lastname ?? "").localeCompare(b?.lastname ?? ""));

a?.lastname 中的可选链接类似于 (a != null ? a.lastname : undefined),而 nullish 合并 expr ? ? "" 类似于 (expr != null ? expr : "")。这样就可以产生类似于

的东西
con.sort((a, b) => ((a || {}).lastname || "").localeCompare((b || {}).lastname || ""));

虽然比较丑陋,但应该可以在 TS3.6 及以下版本中工作。这两者都使元素 null{lastname: undefined}{lastname: null}{lastname: ""} 就排序顺序而言,所有这些都可以互换。如果您希望查看这些内容按某种特定顺序相对于彼此或相对于具有非空 lastname 属性的元素进行排序,那么您应该在问题中指定这一点。

<小时/>

让我们看看它是如何工作的:

const con: Array<{ lastname?: string | null } | null | undefined> = [
{ lastname: "" },
{ lastname: "B" },
{ lastname: null },
null,
{ lastname: "A" },
{},
{ lastname: "C" }
]
console.log(JSON.stringify(con));
// [{"lastname":""},{"lastname":"B"},{"lastname":null},null,{"lastname":"A"},{},{"lastname":"C"}]

使用TS3.7代码排序:

const newCon = con.slice();
newCon.sort((a, b) => (a?.lastname ?? "").localeCompare(b?.lastname ?? ""));
console.log(JSON.stringify(newCon));
// [{"lastname":""},{"lastname":null},null,{},{"lastname":"A"},{"lastname":"B"},{"lastname":"C"}]

并使用 TS3.6- 代码:

const newCon2 = con.slice();
newCon2.sort((a, b) => ((a || {}).lastname || "").localeCompare((b || {}).lastname || ""));
console.log(JSON.stringify(newCon2));
// [{"lastname":""},{"lastname":null},null,{},{"lastname":"A"},{"lastname":"B"},{"lastname":"C"}]

两者都产生相同的顺序,其中“空”元素被移动到前面并按照数组中的原始顺序(您不能计数 Array.prototype.sortstable 但通常是这样),其余元素按 lastname 属性的顺序排序。

Playground link to code

无论如何,希望有帮助;祝你好运!

关于javascript - 使用 localecompare typescript 处理 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com