フィールドでソートする
重要性: 5
ソートするオブジェクトの配列を持っているとします。:
let
users =
[
{
name
:
"John"
,
age
:
20
,
surname
:
"Johnson"
}
,
{
name
:
"Pete"
,
age
:
18
,
surname
:
"Peterson"
}
,
{
name
:
"Ann"
,
age
:
19
,
surname
:
"Hathaway"
}
]
;
それをするための通常の方法はこのようになります:
// by name (Ann, John, Pete)
users.
sort
(
(
a,
b
)
=>
a.
name >
b.
name ?
1
:
-
1
)
;
// by age (Pete, Ann, John)
users.
sort
(
(
a,
b
)
=>
a.
age >
b.
age ?
1
:
-
1
)
;
私たちはこのように冗長さを無くすことはできますか?
users.
sort
(
byField
(
'name'
)
)
;
users.
sort
(
byField
(
'age'
)
)
;
つまり、関数を角換わりに byField(fieldName)
を置きます。
このために使う byField
関数を書いてください。
let
users =
[
{
name
:
"John"
,
age
:
20
,
surname
:
"Johnson"
}
,
{
name
:
"Pete"
,
age
:
18
,
surname
:
"Peterson"
}
,
{
name
:
"Ann"
,
age
:
19
,
surname
:
"Hathaway"
}
]
;
function
byField
(
field
)
{
return
(
a,
b
)
=>
a[
field]
>
b[
field]
?
1
:
-
1
;
}
users.
sort
(
byField
(
'name'
)
)
;
users.
forEach
(
user
=>
alert
(
user.
name)
)
;
// Ann, John, Pete
users.
sort
(
byField
(
'age'
)
)
;
users.
forEach
(
user
=>
alert
(
user.
name)
)
;
// Pete, Ann, John