相変わらず、なにが言いたいのかタイトルで伝わり辛いと思いますのでコードで書きます。

やりたいこと


これを

1
2
3
4
5
6
7
8
9
[
{ dayOfWeek: 'Sun', id: 0 },
{ dayOfWeek: 'Mon', id: 1 },
{ dayOfWeek: 'Tue', id: 2 },
{ dayOfWeek: 'Wed', id: 3 },
{ dayOfWeek: 'Thu', id: 4 },
{ dayOfWeek: 'Fri', id: 5 },
{ dayOfWeek: 'Sat', id: 6 }
]

こうしたい

1
2
3
4
5
6
7
8
9
[
{ id: 0, dayOfWeek: 'Sun' },
{ id: 1, dayOfWeek: 'Mon' },
{ id: 2, dayOfWeek: 'Tue' },
{ id: 3, dayOfWeek: 'Wed' },
{ id: 4, dayOfWeek: 'Thu' },
{ id: 5, dayOfWeek: 'Fri' },
{ id: 6, dayOfWeek: 'Sat' }
]

コード


こう書いてみた。というかこれしか思い浮かばなかった…。

1
2
3
4
5
6
7
8
function reCreatedObject(objects) {
return objects.map(x => {
return {
id: x.id,
dayOfWeek: x.dayOfWeek
};
});
}

実行してみる


書いたものを実行してみる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const weekday = [
{ dayOfWeek: 'Sun', id: 0 },
{ dayOfWeek: 'Mon', id: 1 },
{ dayOfWeek: 'Tue', id: 2 },
{ dayOfWeek: 'Wed', id: 3 },
{ dayOfWeek: 'Thu', id: 4 },
{ dayOfWeek: 'Fri', id: 5 },
{ dayOfWeek: 'Sat', id: 6 }
];

function reCreatedObject(objects) {
return objects.map(x => {
return {
id: x.id,
dayOfWeek: x.dayOfWeek
};
});
}

let result = reCreatedObject(weekday)
console.log(result);

//結果
[ { id: 0, dayOfWeek: 'Sun' },
{ id: 1, dayOfWeek: 'Mon' },
{ id: 2, dayOfWeek: 'Tue' },
{ id: 3, dayOfWeek: 'Wed' },
{ id: 4, dayOfWeek: 'Thu' },
{ id: 5, dayOfWeek: 'Fri' },
{ id: 6, dayOfWeek: 'Sat' } ]

思い通り動いているが、もうちょっと簡単に汎用的にできないかな~と思ったり。頑張ったらできるんだろうけど。

追記:同僚からのツッコミ


このブログは同僚および後輩に存在がバレており日常的に監視されているのですが、同僚氏が「以下でいいんじゃないですかね?」と言ってきたので同僚氏案のコードを載せます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function compare(order = 'asc', left, right, ) {
const ret = (order === 'asc') ? -1 : 1
if (left.id > right.id) {
return ret
}
else if (left.id === right.id) {
return 0
}
else {
return -ret;
}
}

const compareAscending = compare.bind(this, "asc")
const compareADescending = compare.bind(this, "desc")

//asc
let result = weekday.slice(0).sort(compareAscending)
console.log(result);
//desc
result = weekday.slice(0).sort(compareADescending)
console.log(result);

だいたいこういうのは比較を使うかライブラリを使って対応するらしいです。JS初心者なので許してちょ。