排序不使用Array.sort()方法的对象数组

时间:2018-03-17 15:12:04

标签: javascript arrays angular typescript methods

我试图通过每个对象上存在的name属性对对象数组进行排序。当使用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);

这是奇怪的......

当我跑步时:

myArray.forEach()

它完全记录了这些名字。我错过了什么?

只需要深入了解一下背景:

我从角度service.ts文件执行HTTP调用后使用此方法,此数组正在传递给我的组件并订阅。我正在使用Angular,所以这将是编写JavaScript的Typescript。我的sort()方法正下方还有另一个integral = scipy.integrate.tplquad(lambda z, y, x: int(Vector(x, y, z).dot(normal) < distance), -0.5, 0.5, lambda x: -0.5, lambda x: 0.5, lambda x, y: -0.5, lambda x, y: 0.5, epsabs=1e-5, epsrel=1e-5) 方法,而且工作正常。

2 个答案:

答案 0 :(得分:4)

这是你想要的吗?

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

答案 1 :(得分:0)

您可以使用一种独立于字符串或数字类型的比较,方法是将数值移到顶部。

&#13;
&#13;
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);
&#13;
&#13;
&#13;