Я не видел такого конкретного подхода, поэтому я хотел бы использовать метод сравнения, который мне нравится использовать как для string
, так и для number
:
const objs = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' },
{ first_nom: 'Pig', last_nom: 'Bodine' },
{ first_nom: 'Pirate', last_nom: 'Prentice' }
];
const sortBy = fn => (a, b) => -(fn(a) < fn(b)) || +(fn(a) > fn(b))
const getLastName = o => o.last_nom
const sortByLastName = sortBy(getLastName)
objs.sort(sortByLastName)
console.log(objs.map(getLastName))
Вот объяснение sortBy()
:
sortBy()
принимает параметр fn
, который выбирает какое значение для объекта для использования в качестве сравнения и возвращает функцию, которая может передаются непосредственно на Array.prototype.sort()
. В этом примере мы используем o.last_nom
как значение для сравнения, поэтому всякий раз, когда мы получаем два объекта через Array.prototype.sort()
, такие как
{ first_nom: 'Lazslo', last_nom: 'Jamf' }
и
{ first_nom: 'Pig', last_nom: 'Bodine' }
мы используем
(a, b) => -(fn(a) < fn(b)) || +(fn(a) > fn(b))
для их сравнения.
Вспоминая, что fn = o => o.last_nom
, мы можем развернуть функцию сравнения с эквивалентом
(a, b) => -(a.last_nom < b.last_nom) || +(a.last_nom > b.last_nom)
. Логическое Оператор OR ||
имеет функцию короткого замыкания, которая здесь очень полезна. Из-за того, как это работает, тело функции выше означает
if (a.last_nom < b.last_nom) return -1
return +(a.last_nom > b.last_nom)
Итак, если a < b
мы возвращаем -1
, в противном случае, если a > b
, то мы возвращаем +1
, но если a == b
, тогда a < b
и a > b
являются ложными, поэтому он возвращает +0
.
В качестве дополнительного бонуса здесь эквивалент в ECMAScript 5.1 без функций стрелок, что, к сожалению, не совсем так:
var objs = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' },
{ first_nom: 'Pig', last_nom: 'Bodine' },
{ first_nom: 'Pirate', last_nom: 'Prentice' }
];
var sortBy = function (fn) {
return function (a, b) {
return -(fn(a) < fn(b)) || +(fn(a) > fn(b))
}
}
var getLastName = function (o) { return o.last_nom }
var sortByLastName = sortBy(getLastName)
objs.sort(sortByLastName)
console.log(objs.map(getLastName))
Я не уверен, что мерзавец svn когда-либо работал с недавним распределением Windows Мерзавца (отправьте 1.5.6).
о Многих проблемах сообщили прежде, таким образом git svn
может не очень быть включен в текущие выпуски msysGit.
Другой текущий активный "Мерзавец в Windows" разработка mingw.git действительно указывает в README, что svn не работает.
Этот поток Msysgit действительно предполагает, что мерзавец svn может повторно интегрироваться в некоторых точках, но прогресс является все еще медленным.
<час> Обновление: от MSysGit1.6.2 (в начале марта 2009), git-svn
работы снова . Посмотрите это ТАК вопрос .
Обновление: с современный (2017) уже включен Мерзавец для Windows 2.x , git svn
.
Никакая потребность в sudo apt-get install git-svn
, который только был бы возможен в WSL (Windows Subsystem для Linux) сессия оболочки так или иначе.
Под моей системой я испытал эти затруднения:
$ git svn
Can't locate SVN/Core.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.10.0
/usr/lib/perl5/5.10.0/i486-linux-thread-multi
/usr/lib/perl5/5.10.0
/usr/lib/perl5/site_perl/5.10.0/i486-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.10.0/i486-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.10.0
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl .) at
/usr/libexec/git-core/git-svn line 29.
, потому что мне не установили привязку Perl Подверсии. Попытайтесь установить их и выполнить команду снова.
Я просто проверяю свое недавно установленное поле человечности, и оно не было установлено даже с установленным ядром мерзавца. Простое:
sudo apt-get install git-svn
или Ваш эквивалентный дистрибутив должен зафиксировать его.
Если мерзавец-svn не является частью mSysGit, я рекомендую использовать маленький сервер UNIX для хостинга репозитория шлюза, который клонирует репозиторий SVN, и затем клонируйте тот репозиторий на машину Windows. Это - подход, который я использую для взаимодействия с CVS от мерзавца.
Это не было установлено на моей новой установке Ubuntu на WSL -
sudo apt install git-svn
, отсортировал его:
❯ git svn
git-svn - bidirectional operations between a single Subversion tree and git
...