JavaScriptで配列に値を挿入すべき最小のインデックスを求める方法(昇順・降順ソート対応)
本記事では、配列(第1引数)を昇順または降順でソートした状態を想定し、指定した値(第2引数)を挿入すべき最小のインデックスを返す関数を作成します。戻り値は数値である必要があります。
動作イメージ
例として、getIndexToInsert() という関数を考えてみましょう。
getIndexToInsert([1,2,3,4], 1.5, 'asc') は 1 を返します。
1.5 は 1(インデックス0)より大きく、2(インデックス1)より小さいためです。
同様に、次の例も見てみましょう。
getIndexToInsert([20,3,5], 19, 'asc') は 2 を返します。
配列を昇順にソートすると [3,5,20] となり、19 は 20(インデックス2)より小さく、
5(インデックス1)より大きいためです。
それでは、この関数のコードを実際に書いていきましょう。
実装例
const arr = [20, 3, 5];
const getIndexToInsert = (arr, element, order = 'asc') => {
const creds = arr.reduce((acc, val) => {
let { greater, smaller } = acc;
if(val < element){
smaller++;
}else{
greater++;
};
return { greater, smaller };
}, {
greater: 0,
smaller: 0
});
return order === 'asc' ? creds.smaller : creds.greater;
};
console.log(getIndexToInsert(arr, 19, 'des'));
console.log(getIndexToInsert(arr, 19,));
コードの解説
この関数では、Array.prototype.reduce() メソッドを使用して、配列内の各要素と挿入対象の値を1つずつ比較しています。その結果、「対象より小さい要素の数(smaller)」と「対象より大きい要素の数(greater)」をカウントします。
- 昇順の場合: 対象より小さい要素の数が、そのまま挿入位置(インデックス)になります。
- 降順の場合: 対象より大きい要素の数が、挿入位置になります。
第3引数の order にはデフォルト値として 'asc'(昇順)が設定されているため、省略した場合は昇順での挿入位置が返されます。
出力結果
コンソールには以下のように表示されます。
1
2
最初の出力は降順('des')を指定した場合で、ソート後の配列 [20, 5, 3] の中で 19 は 20 の直後に挿入されるため 1 となります。2番目の出力は順序を省略して昇順とした場合で、ソート後の配列 [3, 5, 20] の中で 19 は 5 と 20 の間に挿入されるため 2 となるのです。
-
SeleniumでJavaScriptコードの戻り値を取得する方法
Selenium WebDriverを使用すると、JavaScriptコードの戻り値を取得することができます。SeleniumはexecuteScriptメソッドを利用してJavaScriptコマンドを実行でき、実行したいJavaScriptコマンドはこのメソッドの引数として渡します。 JavaScriptコードから値を返す際にはreturnキーワードを使用します。また、JavaScriptを操作するためには、import org.openqa.selenium.JavascriptExecutorというインポート文を追加する必要がある点にも注意してください。 構文 JavascriptEx
-
Python Pandas – インデックスの降順ソート済みコピーを返す方法
Pandasでインデックスのソート済みコピーを取得するには、index.sort_values()メソッドを使用します。降順でソートしたい場合は、パラメータascendingをFalseに設定します。まず、必要なライブラリをインポートします。import pandas as pdPandasインデックスの作成次に、Pandasのインデックスを作成します。index = pd.Index([50, 10, 70, 95, 110, 90, 30])作成したPandasインデックスを表示してみましょう。print(Pandas Index...\n,index)インデックスを降順でソートするインデ