Javascript два arraySort возвращает тот же результат - PullRequest
0 голосов
/ 03 декабря 2018

Здравствуйте, я новичок в 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 голосов
/ 03 декабря 2018

вы можете изменить условие в зависимости от того, в каком порядке вы хотите получить желаемый результат.

Сначала вам нужно отсортировать по году, а затем вы можете отсортировать отсортированный массив с вычитанием переданного и годового свойстваи сортируйте его.

Я надеюсь, что приведенный ниже код решит вашу проблему.

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)
0 голосов
/ 03 декабря 2018

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...