JavaScriptの.sort()メソッドの問題を修正しました。1つだけではなく2つの配列がソートされます
Array.prototype.sort()関数のプロパティの1つは、インプレース並べ替えアルゴリズムであるということです。つまり、並べ替える配列の新しいコピーを作成せず、余分なスペースを使用せずに配列を並べ替えて、効率を高めます。パフォーマンスが優れていますが、この特性により、厄介な状況が発生する場合があります。
例を挙げてこれを理解しましょう。いくつかの文字列リテラルを含むnames配列があると仮定します。この配列の順序をそのまま維持し、names配列と同じ要素を含むが、アルファベット順にソートされた別の配列が必要です。
私たちはこのようなことをすることができます-
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = names; sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
ただし、JavaScriptでわかっているように、配列もオブジェクトであり、オブジェクトは値ではなく参照によってコピーされるため、1つの配列を並べ替えると、両方の配列が並べ替えられます。これは明らかに必要ありません。
ソリューション
1。新しい配列の初期化中にslice()を使用する
例
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = names.slice(); sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
slave()メソッドは、実際には浅いコピーを返し、使用される配列の新しい配列にコピーされます。引数が指定されていない場合は、最初から最後までコピーされます。
このメソッドは、新しい配列の初期化を含み、文字列/数値リテラルの配列でのみ有効であるため、あまり効率的ではありませんが、2番目のメソッドは少し効率的で、オブジェクトの配列でもうまく機能します。
2。 JSON.stringify()/ JSON.parse()を使用する
例
const names = ['Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj']; let sortedNames = JSON.parse(JSON.stringify(names)); sortedNames = sortedNames.sort(); console.log(names); console.log(sortedNames);
配列をJSON文字列に変換し、ある方法で配列に戻すと、コンパイラは参照によってコピーされなくなります。
両方の方法の出力は、コンソールで同じになります-
出力
[ 'Rakesh', 'Mukesh', 'Ram', 'Anshul', 'Dheeraj' ] [ 'Anshul', 'Dheeraj', 'Mukesh', 'Rakesh', 'Ram' ]
-
JavaScriptのSort()メソッド
JavaScriptのsort()メソッドは、配列のソートに使用されます。並べ替えの順序は、アルファベット、数字、昇順、降順のいずれかです。 以下は、sort()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /&
-
2つの配列を1つのJavaScriptオブジェクトに変換できますか?
以下は、2つの配列を1つのJavaScriptオブジェクトに変換するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>