Javascript两个arraySort返回相同的结果

时间:2018-12-03 13:24:50

标签: javascript arrays sorting javascript-objects

你好,我是javascript新手。了解数组时,我遇到了有关排序的问题。首先,我根据他们的生日进行分类,其次,根据他们的年龄进行分类。我仍然得到相同的结果。请帮忙。

代码:

const inventors = [
  { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
  { first: 'Isaac', last: 'Newton', year: 1643, passed: 1711},
  { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
  { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
  { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
  { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
  { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
  { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
  { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
  { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
  { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
  { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
];

const firstSort= inventors.sort((a,b) => a.year > b.year? -1 : 1 );
console.log(firstSort);

const secondSort = inventor.sort((a,b) => (a.year-a.passed > b.year-b.passed) ? -1 : 1);
console.log(secondSort);

这是第一个输出:

0: Object { first: "Ada", last: "Lovelace", year: 1815, … }
​
1: Object { first: "Sarah E.", last: "Goode", year: 1855, … }
​
2: Object { first: "Johannes", last: "Kepler", year: 1571, … }
​
3: Object { first: "Marie", last: "Curie", year: 1867, … }
​
4: Object { first: "Isaac", last: "Newton", year: 1643, … }
​
5: Object { first: "Nicolaus", last: "Copernicus", year: 1473, … }
​
6: Object { first: "Albert", last: "Einstein", year: 1879, … }
​
7: Object { first: "Galileo", last: "Galilei", year: 1564, … }
​
8: Object { first: "Hanna", last: "Hammarström", year: 1829, … }
​
9: Object { first: "Katherine", last: "Blodgett", year: 1898, … }
​
10: Object { first: "Max", last: "Planck", year: 1858, … }
​
11: Object { first: "Lise", last: "Meitner", year: 1878, … }

这是第二个输出

0: Object { first: "Ada", last: "Lovelace", year: 1815, … }
​
1: Object { first: "Sarah E.", last: "Goode", year: 1855, … }
​
2: Object { first: "Johannes", last: "Kepler", year: 1571, … }
​
3: Object { first: "Marie", last: "Curie", year: 1867, … }
​
4: Object { first: "Isaac", last: "Newton", year: 1643, … }
​
5: Object { first: "Nicolaus", last: "Copernicus", year: 1473, … }
​
6: Object { first: "Albert", last: "Einstein", year: 1879, … }
​
7: Object { first: "Galileo", last: "Galilei", year: 1564, … }
​
8: Object { first: "Hanna", last: "Hammarström", year: 1829, … }
​
9: Object { first: "Katherine", last: "Blodgett", year: 1898, … }
​
10: Object { first: "Max", last: "Planck", year: 1858, … }
​
11: Object { first: "Lise", last: "Meitner", year: 1878, … }

2 个答案:

答案 0 :(得分:1)

Array.sort()处理返回值。

此外,由于ElementUnion大于a.passed - a.year

,因此生命周期应计算为a.passed

a.year

答案 1 :(得分:0)

您可以根据想要获得所需结果的顺序更改条件。

首先,您需要按年份排序,然后可以通过减去passed和year属性对排序后的数组进行排序。

我希望以下代码能解决您的问题。

const inventors = [
  { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
  { first: 'Isaac', last: 'Newton', year: 1643, passed: 1711},
  { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
  { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
  { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
  { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
  { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
  { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
  { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
  { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
  { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
  { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
];
let sortedArr = inventors.sort((a,b) =>(a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0)).sort((a,b) => (a.year - a.passed > b.year - b.passed) ? 1 : (b.year - b.passed > a.year - a.passed) ? -1 : 0 )


console.log(sortedArr)