アレイ高次関数Array.sort
配列高次関数は
配列高次関数とは、関数を引数として渡したり戻したりする関数です.
JavaScriptの関数は1レベルのオブジェクトなので、値のように関数を引数として渡したり、返したりすることができます.
これは不変状態向けの関数式プログラミングに基づいている.
反復文と条件文の欠点は,構成論理を把握することが難しく,エラーが発生しやすく,コードの可読性も悪いことである.関数プログラミングは,それを最小化し,プログラムの安定性を向上させる努力の一つである.
Array.prototype.sort
sortメソッドは、ソース配列の要素をソートします.ソース配列を直接変更して、整列された要素を返すこともできます.
例
1.文字列のソート
const friut = ['Banana', 'Orange', 'Apple']
// 오름차순 정렬
console.log(friut.sort()); // ['Apple', 'Banana', 'Orange'] -> 원본 배열을 직접 변경한다.
// 내림차순 정렬
console.log(friut.sort().reverse()) //['Orange', 'Banana', 'Apple']
// reverse 메소드도 원본 배열을 직접 변경한다.
console.log(friut)
2.数値ソート
const number = [40, 100, 1, 5, 2, 25, 10];
console.log(number.sort()); // (7) [1, 10, 100, 2, 25, 40, 5] ???????
// 의도한대로 정렬되지 않는 모습
// 숫자 정렬은 유니코드 코드 포인트 순서를 따른다. 쉽게 말하자면 1은 2보다 무조건 앞인셈,,
console.log(['2', '1'].sort()); // ['1', '2']
console.log([2, 1].sort()); // [1, 2]
sortメソッドは、配列内の要素を一時的に文字列に変換し、ソートします.
数字の並べ替えから見ると,[1,2,5,10,25,410]の順であるはずだが,並べ替えがおかしい.
では、数字はどのようにソートすればいいのでしょうか.
3.JavaScriptの例外ソート
前に見たように、数値要素は目的の結果を得るのが難しい.sortメソッドのデフォルトのソート順はUnicodeコードポイントに従います.配列内の要素が数値タイプであっても、配列内の要素を文字列に変換し、Unicodeコードポイントの順序に従ってソートします.
たとえば、文字列「10」のUnicode点は、文字列「2」のコード点よりも先であるため、この値が返されます.
したがって,数値要素をソートする際には,比較ソート順の比較因子(関数)をsort法に渡す必要がある.const number = [40, 100, 1, 5, 2, 25, 10];
// 숫자 배열의 오름차순 정렬, 비교함수의 반환값이 0 보다 작으면 a를 우선으로 정렬한다.
console.log(number.sort((a, b) => a - b)) // (7) [1, 2, 5, 10, 25, 40, 100]
// 숫자 배열의 내림차순 정렬, 비교함수의 반환값이 0보다 작으면 b를 우선으로 정렬한다.
console.log(number.sort((a, b) => b - a)) // (7) [100, 40, 25, 10, 5, 2, 1]
a-b値が負数なのか負数なのか、ソートが違います!
特にarr.sort(((a,b)=>a−b)構文は非常に多く用いられる.暗記したほうがいいです.
Reference
この問題について(アレイ高次関数Array.sort), 我々は、より多くの情報をここで見つけました
https://velog.io/@96hxx_/배열-고차함수-Array.sort
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
sortメソッドは、ソース配列の要素をソートします.ソース配列を直接変更して、整列された要素を返すこともできます.
例
1.文字列のソート
const friut = ['Banana', 'Orange', 'Apple']
// 오름차순 정렬
console.log(friut.sort()); // ['Apple', 'Banana', 'Orange'] -> 원본 배열을 직접 변경한다.
// 내림차순 정렬
console.log(friut.sort().reverse()) //['Orange', 'Banana', 'Apple']
// reverse 메소드도 원본 배열을 직접 변경한다.
console.log(friut)
2.数値ソート
const number = [40, 100, 1, 5, 2, 25, 10];
console.log(number.sort()); // (7) [1, 10, 100, 2, 25, 40, 5] ???????
// 의도한대로 정렬되지 않는 모습
// 숫자 정렬은 유니코드 코드 포인트 순서를 따른다. 쉽게 말하자면 1은 2보다 무조건 앞인셈,,
console.log(['2', '1'].sort()); // ['1', '2']
console.log([2, 1].sort()); // [1, 2]
sortメソッドは、配列内の要素を一時的に文字列に変換し、ソートします.
数字の並べ替えから見ると,[1,2,5,10,25,410]の順であるはずだが,並べ替えがおかしい.
では、数字はどのようにソートすればいいのでしょうか.
3.JavaScriptの例外ソート
前に見たように、数値要素は目的の結果を得るのが難しい.sortメソッドのデフォルトのソート順はUnicodeコードポイントに従います.配列内の要素が数値タイプであっても、配列内の要素を文字列に変換し、Unicodeコードポイントの順序に従ってソートします.
たとえば、文字列「10」のUnicode点は、文字列「2」のコード点よりも先であるため、この値が返されます.
したがって,数値要素をソートする際には,比較ソート順の比較因子(関数)をsort法に渡す必要がある.const number = [40, 100, 1, 5, 2, 25, 10];
// 숫자 배열의 오름차순 정렬, 비교함수의 반환값이 0 보다 작으면 a를 우선으로 정렬한다.
console.log(number.sort((a, b) => a - b)) // (7) [1, 2, 5, 10, 25, 40, 100]
// 숫자 배열의 내림차순 정렬, 비교함수의 반환값이 0보다 작으면 b를 우선으로 정렬한다.
console.log(number.sort((a, b) => b - a)) // (7) [100, 40, 25, 10, 5, 2, 1]
a-b値が負数なのか負数なのか、ソートが違います!
特にarr.sort(((a,b)=>a−b)構文は非常に多く用いられる.暗記したほうがいいです.
Reference
この問題について(アレイ高次関数Array.sort), 我々は、より多くの情報をここで見つけました
https://velog.io/@96hxx_/배열-고차함수-Array.sort
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const friut = ['Banana', 'Orange', 'Apple']
// 오름차순 정렬
console.log(friut.sort()); // ['Apple', 'Banana', 'Orange'] -> 원본 배열을 직접 변경한다.
// 내림차순 정렬
console.log(friut.sort().reverse()) //['Orange', 'Banana', 'Apple']
// reverse 메소드도 원본 배열을 직접 변경한다.
console.log(friut)
const number = [40, 100, 1, 5, 2, 25, 10];
console.log(number.sort()); // (7) [1, 10, 100, 2, 25, 40, 5] ???????
// 의도한대로 정렬되지 않는 모습
// 숫자 정렬은 유니코드 코드 포인트 순서를 따른다. 쉽게 말하자면 1은 2보다 무조건 앞인셈,,
console.log(['2', '1'].sort()); // ['1', '2']
console.log([2, 1].sort()); // [1, 2]
const number = [40, 100, 1, 5, 2, 25, 10];
// 숫자 배열의 오름차순 정렬, 비교함수의 반환값이 0 보다 작으면 a를 우선으로 정렬한다.
console.log(number.sort((a, b) => a - b)) // (7) [1, 2, 5, 10, 25, 40, 100]
// 숫자 배열의 내림차순 정렬, 비교함수의 반환값이 0보다 작으면 b를 우선으로 정렬한다.
console.log(number.sort((a, b) => b - a)) // (7) [100, 40, 25, 10, 5, 2, 1]
Reference
この問題について(アレイ高次関数Array.sort), 我々は、より多くの情報をここで見つけました https://velog.io/@96hxx_/배열-고차함수-Array.sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol