[ジェコベNo.34]sort実施
16897 ワード
質問する
民主主義のためにプログラムを作って、背をあげたら、順番に立っているかどうかを確認します.(入力したキーはスペースで区切られています.)
입출력
입력: 176 156 155 165 166 169
출력: NO
입력: 155 156 165 166 169 176
출력: Y
それぞれのアルゴリズム🧐
sort()メソッドは、配列内の要素を適切な位置に並べ替え、配列を返します.ソートは安定したsortではないかもしれません.デフォルトのソート順は、文字列内のUnicodeコードポイントに従います.
//다음 함수는 배열을 오름차순으로 정렬합니다 (Infinity 및 NaN이 포함되어 있지 않은 경우)
function compareNumbers(a, b) {
return a - b;
}
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort 無効なコード💬
const answer = prompt('키 입력하세요~').split(' ');
let height = answer.sort((a,b) => a - b);
// ----------------------------------------
// arrow를 안 쓸 경우
let height = answer.sort(function(a,b) {
return a - b;
}
if(answer === height){
console.log('Y');
} else {
console.log('N')
}
エラーコードの原因🗣
入力のみをpromptとして受信すると、デフォルトタイプの文字列となり、入力したデータを参照タイプの配列に分割します.変換された参照タイプarrayが別の変数heightに格納されている場合、コピー値ではなくアドレスのみがコピーされるため、値が共有されます.値を共有すると、2つの変数の値は常に一致するため、必要なリンゴ値を出力できません.そのため、アップルの値が正常に出力されない理由は、Shellowコピーになっているからです.😥
shallow copy & deep copy
📝 Spread Operator
展開構文では、配列や文字列などの繰り返し可能な文字をゼロまたは複数の引数(関数呼び出し)または要素(配列テキスト)に展開し、オブジェクトをゼロまたは複数のキー値ペアに展開できます.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax
(mdnの説明が理解できない場合は、私が書いたエラーコードの原因を確認できます)🐣)
Spread Operatorには、浅いコピー(浅いコピー)と深いコピー(深いコピー)があります.サンプルコードを見てみましょう.
shallow copy 💁♀️
//원시타입인 string은 값이 공유되지 않아 string만 바뀐것을 확인 할 수 있다.
let string = 'abc';
let stringCopy = string;
string = 'chage';
console.log(`string: ${string}, stringCopy: ${stringCopy}`);
//참조형 타입인 array는 값이 공유가 되어 array와 arraySharing이 바뀌는것을 볼 수 있다.
let array = ['a', 'b', 'c'];
let arraySharing = array;
array.push('jetom');
console.log(`array: ${array}, arraySharing: ${arraySharing}`;
deep copy 💁
デプスコピーは、データを参照するのではなく、新しいオブジェクト(値「のみ」など)にデータをコピーする方法です.いろいろありますが、ここではJSONのみを紹介します.(概念説明文ではないので🤤..) JSONは簡単にフォーマットを変換する方法で、parseとstringifyがあります.
📝 JSON
JSONオブジェクトには、JavaScriptオブジェクト注釈(JSON)を解析したり、値をJSONに変換したりする方法があります.JSONを直接呼び出したり、インスタンスを作成したりすることはできません.2つの方法以外に、興味のある機能はありません.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON
📝 JSON.stringify()
JSON.stringify()メソッドは、JavaScript値またはオブジェクトをJSON文字列に変換します.あるいは、置換プログラムを関数として渡すと、変換前に値を変換できます.アレイに渡すと、結果には指定した属性のみが含まれます.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
const jetom = {
age: 5,
color: 'white',
weight: '7kg'
};
//스트링으로 바뀔 때 값을 참조하는것이 아닌 복사를 해 온다.
const jetomStr = JSON.stringify(jetom);
console.log(typeof(jetom));
console.log(typeof(jetomStr));
console.log(jetomStr);
📝 JSON.parse()
JSON.parse()メソッドは、JSON文字列の構文を解析し、JavaScript値またはオブジェクトを生成します.あるいは、復元関数をパラメータとして渡すと、結果を返す前に変換できます.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
const jetom = {
age: 5,
color: 'white',
weight: '7kg'
};
//객체를 형 변환 시켰으므로, 객체 형식의 문자열이다.
const jetomStr = JSON.stringify(jetom);
//객체 형식의 문자열을 또 한번 변환 시켜서 객체가 되었다.
const jetomPar = JSON.parse(jetomStr)
console.log(typeof(jetom));
console.log(typeof(jetomStr));
console.log(typeof(jetomPar));
console.log(jetom.age === jetomPar.age);
最終コード🧚♀️
したがって、値参照をしたくない場合は、答えは入力を受け入れ、heightでsplitを行うしかありません.🤓
const answer = prompt('키 입력하세요~');
let height = answer.split(' ').sort((a,b) => a - b);
if(answer === height){
console.log('Y');
} else{
console.log('N');
}
値共有とレプリケーションにはreturnとconsoleが含まれます.logレベルに混同します.今日もJavaScriptの一日でした.🤯
Reference
この問題について([ジェコベNo.34]sort実施), 我々は、より多くの情報をここで見つけました https://velog.io/@jetom/제코베-No.34-sort-구현하기-u3bg6qqvテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol