【问题标题】:Sorting of Array of Objects not working with Array.sort() method对象数组的排序不使用 Array.sort() 方法
【发布时间】:2018-08-26 13:31:13
【问题描述】:

我正在尝试按每个对象上存在的名称属性对对象数组进行排序。当使用sort() 方法和下面的代码时,我收到以下错误:

ERROR ReferenceError: b is not defined

这是我的代码:

myArray.sort( (a, b) => {
return (typeof a.name: string === 'string') - (typeof b.name === 'string')|| a.name - b.name || a.name.localeCompare(b.name)};

这就是奇怪的地方......

当我跑步时:

myArray.sort( (a, b) => {
console.log(a.name);
console.log(b.name);

它完美地记录了名称。我错过了什么??

只是为了彻底了解一点上下文:

我在从角度 service.ts 文件进行 HTTP 调用后使用此方法,并且此数组正在传递给我的组件并被订阅。我正在使用 Angular,所以这将是 Typescript 编译为 JavaScript。我的sort() 方法下方还有另一个myArray.forEach() 方法,它正在工作。

【问题讨论】:

  • 请同时添加数组。
  • 减法运算符不适用于字符串值;您希望该表达式做什么?
  • 在我看来不像是有效的打字稿语法。
  • 有这么多|| 运算符,您最好在整个过程中添加括号,但实际上,您可能希望回到使用更容易调试 的旧的-时尚if .. else
  • 请添加minimal, complete and verifiable example 以显示实际问题。

标签: javascript arrays angular typescript methods


【解决方案1】:

这是你想要的吗?

var a = [
  { name: "John" },
  { name: "Jack" },
  { name: "Bob" }
];

a.sort(function (a, b) {
  if (a.name > b.name) return 1;
  if (a.name < b.name) return -1;
  return 0;
});

console.log(a);

【讨论】:

  • 这行得通。谢谢!我是 TypeScript 的新手,正在解决一些问题。也许我应该坚持为我的项目编写 JS
  • @newman 如你所愿,我猜你知道 TypeScript 是 JavaScript 的超集,因此当你不确定如何使用 TS 时,你可以使用 JS :-)
【解决方案2】:

您可以通过将数值移到顶部来使用独立于字符串或数字类型的比较。

var array = [{ name: 20 }, { name: 21 }, { name: 2 }, { name: 11 }, { name: 1 }, { name: 'John' }, { name: 'Jane' }, { name: 'Frank' }, { name: 'Mary' },] 

array.sort((a, b) => (typeof a.name === 'string') - (typeof b.name === 'string') || a.name > b.name || -(a.name < b.name));

console.log(array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2010-12-23
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多