Javascript两个arraySort返回相同的结果



你好,我是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, … }

Array.sort((处理返回值。

此外,寿命周期应计算为a.passed - a.year,因为a.passed大于a.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 }
];
const firstSort = inventors.sort((a,b) => a.year - b.year); // exactly the same as a.year > b.year ? 1 : -1;
console.log(firstSort);
const secondSort = inventors.sort((a,b) => (a.passed - a.year) - (b.passed - b.year));
console.log(secondSort);

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

首先你需要按年份排序,然后你可以通过减去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)

最新更新