混乱したjs文法~
9365 ワード
古びた髪に油をつけるため、プログラマーレベル1からjsで解くことにした.
しかし、タイムアウトで苦労した問題があります.
完走できなかった選手だ.
https://programmers.co.kr/learn/courses/30/lessons/42576?language=javascript
最初はそれをオブジェクトにして、キーは名前で、値は数で、比較すると速くなるかどうか、私は茫然と考えて、結局遠慮なくタイムアウトしました.
長い間悩んでいたのですが、2つの配列を並べ替えた方が早いと思って通過しました.
だから他の人がどうやってやったのか知りたくて、見てみると、少し散らかっていました.
問題コード
しかし、タイムアウトで苦労した問題があります.
完走できなかった選手だ.
https://programmers.co.kr/learn/courses/30/lessons/42576?language=javascript
最初はそれをオブジェクトにして、キーは名前で、値は数で、比較すると速くなるかどうか、私は茫然と考えて、結局遠慮なくタイムアウトしました.
長い間悩んでいたのですが、2つの配列を並べ替えた方が早いと思って通過しました.
だから他の人がどうやってやったのか知りたくて、見てみると、少し散らかっていました.
問題コード var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
こうりつさ
一行が終わり、もちろん可読性は落ちていましたが、可愛そうに解説をまとめてここに書きました.
鳥の解説 var solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
ランナー配列を{名前:ランナー配列が現れる回数}にマッピングし、そのマッピングに参加者名を追加します.検索するたびに回数が減少し、0のやつを見つけて関数を吐き出します.
パトソン解説
研究してみると、鳥様が説明したことはすべて正しいことがわかりました.
まずは$とミニパイで、達人達の見た目(?)そうですね.
participant.find(コールバック関数,マッピングクラッシュ)は2つのパラメータを与え,後のマッピングクラッシュはコールバック前に実行される.
mdnドキュメントを参照すると、thisArgは最初のパラメータセクションの前に実行されます.
したがって、関数が起動すると、コールバック加速関数ではなく、2番目のマッピング関数が最初に実行されます.
マッピング関数は新しい配列を返し、マッピング関数はベース波を返します.ここで、「返された配列」には意味がありません.
しかし,第1のパラメータcallback allow関数と比較して,第2の関数はまず実行することが重要である.
コールバックで重要なタスクを実行する前に、ここで予め給油されていると見なすことができます.
次に、戻りは破棄され、マッピング関数はどのような操作を実行しますか?
completion[name] = (completion[name]|0) + 1
まず、配列のmapが完了するので、nameは完了した各パラメータを表し、完了[name](=)を定義します.
ORを使用して「完了[name]が存在する場合、その値に+1を加算する」を表します.
存在しない場合は0+1(すなわち1)と定義します.
ではここでのポイントは「name」を完成させることです.
JavaScriptの配列は実際にはオブジェクトです.
typeofで任意の配列を作成して確認すると、オブジェクトが現れます.
したがって、[name]が完了すると、オブジェクト内の「key-value」からアクセス価値にアクセスするように、
「完了オブジェクトのnameという値は何ですか」.
このようなキー値ペアが存在せず、undefinedが返されるとfalseになります.したがって、前はfalse、後は0になります.
実際に定義された値は0+1人1です.
したがって、「名前が1つしかない」は:1になります.
2つの名前がある場合、completion[name]はすでに存在し、1という値を返し、1+1になり、2になります.
名前がもっと多い場合は、追加が続行されます.
完了シナリオの各要素に対してこの操作を完了すると、マッピングクラッシュの原因になります.
completionは最初に入力された配列ではなく、名前:個数が「追加された」配列となる.
実際には、変更されたシナリオをチェックすると、このようなことがわかります.
['cake', 'ball', 'sauce', 'cake', cake:2, ball:1, sauce:1]
ちょっと笑いっぽい
では、今準備が終わり、本題に入ります.
しかし、私の前に、理解を助けるために、この準備は準備だけなので、ジェナを馮辛から持ち出して単独で書けばいいです.
このまま.var solution = (participant, completion) => {
completion.map(name =>
completion[name] = (completion[name] | 0) + 1
);
return participant.find((name) => !completion[name]--);
};
이게 뭘까.. ㅋㅋㅋ
本稿では、完了作業が完了したため、前のセクションのモード名はstring、次はキー値パネルであり、各名前の個数はキー値パネルである.
まずfindは、テスト後に「ドラッグ&ドロップ」する最初の要素を返します.
では今!completion[name]--これがどんなテストなのか見て、どんな場合に「true」がビーズなのか考えてみましょう.
![name]--ここで重要なのは2つです.
ご存知の通り、completion[name]にはその名前の「個数」が読み込まれます.
重要1:感嘆符は何をしていますか?
感嘆符の後ろの値を単純に「ブール値」に変更するだけで、逆も同様です.
!本当なら嘘が出る.
まだあります.0, !5, !''背中を測ってみよう
参考までにjsの虚偽の価値は全部で7つしかありません.
(false, 0, -0, NaN, null, undefined)
重要2:--ご存知のように、1を削減するには、ここで重要なのは「後置」です.
さっそく値切る!値は、計算後に次の列に進む場合にのみ変更されます.
重要なのは、「瞬間の値を入れる」ことで真偽を見分けることです.
参加者にfindが見つかりました.すべての参加者の名前が表示され、完了時にいくつかの名前が表示されます.
「呼び出された瞬間が1だったので、これが仏利恒なら、本当」という名前があれば、
そしてfindの真偽の判別は前です!感嘆符が我慢の嘘になって「嘘」になったからだ.
1より大きいと同じように0より大きい数字なので虚偽と判定され、find関数が続きます.
「真」の場合、[name]が「偽」であることを完了した値だけが返されます.
この場合、[name]が完了した後に発生する可能性のある値が0である場合、または「name」に対応するペアが完了していない場合、未定義の値が返されます.ではfalseは車に戻されます!だからtrueになる答えはもうすぐ開封する
ちなみに、「0」を返すと、「同名の参加者が2人以上いて、そのうちの1人が入ってこないとき」です.
undefinedに戻る場合は「名前が入ってこない、あの人が入ってこないとき」です.
雑談で定義がないから!打った後、手錠で--打ったら
対応するキー値ペアが存在し、値はNaNです.
ちなみに、私はどちらも好きです.let answer = participant.find((el, index) => el !== completion[index]);
私はやりましたが、上の解法は私の解法よりずっと速いです.
疑問な部分はアレイ内のキー値ペアです.
例:
foreachで['cake', 'ball', 'sauce', 'cake', cake: 2, ball: 1, sauce: 1]
を記録すると身長が見えなくなります
YuiN
foreachがキー値を出さない理由はSymbolに入るから
数字が使えないのは、[name]+1が数字で計算されたからです.
だから理解したのか...
理解できませんでした.
食事をしながらゆっくりもう一度見るべきだと思います.
それよりもfind関数を使っているのでどうなっているのか気になるので探して整理しておきます
Reference
この問題について(混乱したjs文法~), 我々は、より多くの情報をここで見つけました
https://velog.io/@ljh95/어지러운-js문법
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
一行が終わり、もちろん可読性は落ちていましたが、可愛そうに解説をまとめてここに書きました.
鳥の解説 var solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
ランナー配列を{名前:ランナー配列が現れる回数}にマッピングし、そのマッピングに参加者名を追加します.検索するたびに回数が減少し、0のやつを見つけて関数を吐き出します.
パトソン解説
研究してみると、鳥様が説明したことはすべて正しいことがわかりました.
まずは$とミニパイで、達人達の見た目(?)そうですね.
participant.find(コールバック関数,マッピングクラッシュ)は2つのパラメータを与え,後のマッピングクラッシュはコールバック前に実行される.
mdnドキュメントを参照すると、thisArgは最初のパラメータセクションの前に実行されます.
したがって、関数が起動すると、コールバック加速関数ではなく、2番目のマッピング関数が最初に実行されます.
マッピング関数は新しい配列を返し、マッピング関数はベース波を返します.ここで、「返された配列」には意味がありません.
しかし,第1のパラメータcallback allow関数と比較して,第2の関数はまず実行することが重要である.
コールバックで重要なタスクを実行する前に、ここで予め給油されていると見なすことができます.
次に、戻りは破棄され、マッピング関数はどのような操作を実行しますか?
completion[name] = (completion[name]|0) + 1
まず、配列のmapが完了するので、nameは完了した各パラメータを表し、完了[name](=)を定義します.
ORを使用して「完了[name]が存在する場合、その値に+1を加算する」を表します.
存在しない場合は0+1(すなわち1)と定義します.
ではここでのポイントは「name」を完成させることです.
JavaScriptの配列は実際にはオブジェクトです.
typeofで任意の配列を作成して確認すると、オブジェクトが現れます.
したがって、[name]が完了すると、オブジェクト内の「key-value」からアクセス価値にアクセスするように、
「完了オブジェクトのnameという値は何ですか」.
このようなキー値ペアが存在せず、undefinedが返されるとfalseになります.したがって、前はfalse、後は0になります.
実際に定義された値は0+1人1です.
したがって、「名前が1つしかない」は:1になります.
2つの名前がある場合、completion[name]はすでに存在し、1という値を返し、1+1になり、2になります.
名前がもっと多い場合は、追加が続行されます.
完了シナリオの各要素に対してこの操作を完了すると、マッピングクラッシュの原因になります.
completionは最初に入力された配列ではなく、名前:個数が「追加された」配列となる.
実際には、変更されたシナリオをチェックすると、このようなことがわかります.
['cake', 'ball', 'sauce', 'cake', cake:2, ball:1, sauce:1]
ちょっと笑いっぽい
では、今準備が終わり、本題に入ります.
しかし、私の前に、理解を助けるために、この準備は準備だけなので、ジェナを馮辛から持ち出して単独で書けばいいです.
このまま.var solution = (participant, completion) => {
completion.map(name =>
completion[name] = (completion[name] | 0) + 1
);
return participant.find((name) => !completion[name]--);
};
이게 뭘까.. ㅋㅋㅋ
本稿では、完了作業が完了したため、前のセクションのモード名はstring、次はキー値パネルであり、各名前の個数はキー値パネルである.
まずfindは、テスト後に「ドラッグ&ドロップ」する最初の要素を返します.
では今!completion[name]--これがどんなテストなのか見て、どんな場合に「true」がビーズなのか考えてみましょう.
![name]--ここで重要なのは2つです.
ご存知の通り、completion[name]にはその名前の「個数」が読み込まれます.
重要1:感嘆符は何をしていますか?
感嘆符の後ろの値を単純に「ブール値」に変更するだけで、逆も同様です.
!本当なら嘘が出る.
まだあります.0, !5, !''背中を測ってみよう
参考までにjsの虚偽の価値は全部で7つしかありません.
(false, 0, -0, NaN, null, undefined)
重要2:--ご存知のように、1を削減するには、ここで重要なのは「後置」です.
さっそく値切る!値は、計算後に次の列に進む場合にのみ変更されます.
重要なのは、「瞬間の値を入れる」ことで真偽を見分けることです.
参加者にfindが見つかりました.すべての参加者の名前が表示され、完了時にいくつかの名前が表示されます.
「呼び出された瞬間が1だったので、これが仏利恒なら、本当」という名前があれば、
そしてfindの真偽の判別は前です!感嘆符が我慢の嘘になって「嘘」になったからだ.
1より大きいと同じように0より大きい数字なので虚偽と判定され、find関数が続きます.
「真」の場合、[name]が「偽」であることを完了した値だけが返されます.
この場合、[name]が完了した後に発生する可能性のある値が0である場合、または「name」に対応するペアが完了していない場合、未定義の値が返されます.ではfalseは車に戻されます!だからtrueになる答えはもうすぐ開封する
ちなみに、「0」を返すと、「同名の参加者が2人以上いて、そのうちの1人が入ってこないとき」です.
undefinedに戻る場合は「名前が入ってこない、あの人が入ってこないとき」です.
雑談で定義がないから!打った後、手錠で--打ったら
対応するキー値ペアが存在し、値はNaNです.
ちなみに、私はどちらも好きです.let answer = participant.find((el, index) => el !== completion[index]);
私はやりましたが、上の解法は私の解法よりずっと速いです.
疑問な部分はアレイ内のキー値ペアです.
例:
foreachで['cake', 'ball', 'sauce', 'cake', cake: 2, ball: 1, sauce: 1]
を記録すると身長が見えなくなります
YuiN
foreachがキー値を出さない理由はSymbolに入るから
数字が使えないのは、[name]+1が数字で計算されたからです.
だから理解したのか...
理解できませんでした.
食事をしながらゆっくりもう一度見るべきだと思います.
それよりもfind関数を使っているのでどうなっているのか気になるので探して整理しておきます
Reference
この問題について(混乱したjs文法~), 我々は、より多くの情報をここで見つけました
https://velog.io/@ljh95/어지러운-js문법
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
var solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
研究してみると、鳥様が説明したことはすべて正しいことがわかりました.
まずは$とミニパイで、達人達の見た目(?)そうですね.
participant.find(コールバック関数,マッピングクラッシュ)は2つのパラメータを与え,後のマッピングクラッシュはコールバック前に実行される.
mdnドキュメントを参照すると、thisArgは最初のパラメータセクションの前に実行されます.
したがって、関数が起動すると、コールバック加速関数ではなく、2番目のマッピング関数が最初に実行されます.
マッピング関数は新しい配列を返し、マッピング関数はベース波を返します.ここで、「返された配列」には意味がありません.
しかし,第1のパラメータcallback allow関数と比較して,第2の関数はまず実行することが重要である.
コールバックで重要なタスクを実行する前に、ここで予め給油されていると見なすことができます.
次に、戻りは破棄され、マッピング関数はどのような操作を実行しますか?
completion[name] = (completion[name]|0) + 1
まず、配列のmapが完了するので、nameは完了した各パラメータを表し、完了[name](=)を定義します.
ORを使用して「完了[name]が存在する場合、その値に+1を加算する」を表します.
存在しない場合は0+1(すなわち1)と定義します.
ではここでのポイントは「name」を完成させることです.
JavaScriptの配列は実際にはオブジェクトです.
typeofで任意の配列を作成して確認すると、オブジェクトが現れます.
したがって、[name]が完了すると、オブジェクト内の「key-value」からアクセス価値にアクセスするように、
「完了オブジェクトのnameという値は何ですか」.
このようなキー値ペアが存在せず、undefinedが返されるとfalseになります.したがって、前はfalse、後は0になります.
実際に定義された値は0+1人1です.
したがって、「名前が1つしかない」は:1になります.
2つの名前がある場合、completion[name]はすでに存在し、1という値を返し、1+1になり、2になります.
名前がもっと多い場合は、追加が続行されます.
完了シナリオの各要素に対してこの操作を完了すると、マッピングクラッシュの原因になります.
completionは最初に入力された配列ではなく、名前:個数が「追加された」配列となる.
実際には、変更されたシナリオをチェックすると、このようなことがわかります.
['cake', 'ball', 'sauce', 'cake', cake:2, ball:1, sauce:1]
ちょっと笑いっぽい
では、今準備が終わり、本題に入ります.
しかし、私の前に、理解を助けるために、この準備は準備だけなので、ジェナを馮辛から持ち出して単独で書けばいいです.
このまま.
var solution = (participant, completion) => {
completion.map(name =>
completion[name] = (completion[name] | 0) + 1
);
return participant.find((name) => !completion[name]--);
};
이게 뭘까.. ㅋㅋㅋ
本稿では、完了作業が完了したため、前のセクションのモード名はstring、次はキー値パネルであり、各名前の個数はキー値パネルである.まずfindは、テスト後に「ドラッグ&ドロップ」する最初の要素を返します.
では今!completion[name]--これがどんなテストなのか見て、どんな場合に「true」がビーズなのか考えてみましょう.
![name]--ここで重要なのは2つです.
ご存知の通り、completion[name]にはその名前の「個数」が読み込まれます.
重要1:感嘆符は何をしていますか?
感嘆符の後ろの値を単純に「ブール値」に変更するだけで、逆も同様です.
!本当なら嘘が出る.
まだあります.0, !5, !''背中を測ってみよう
参考までにjsの虚偽の価値は全部で7つしかありません.
(false, 0, -0, NaN, null, undefined)
重要2:--ご存知のように、1を削減するには、ここで重要なのは「後置」です.
さっそく値切る!値は、計算後に次の列に進む場合にのみ変更されます.
重要なのは、「瞬間の値を入れる」ことで真偽を見分けることです.
参加者にfindが見つかりました.すべての参加者の名前が表示され、完了時にいくつかの名前が表示されます.
「呼び出された瞬間が1だったので、これが仏利恒なら、本当」という名前があれば、
そしてfindの真偽の判別は前です!感嘆符が我慢の嘘になって「嘘」になったからだ.
1より大きいと同じように0より大きい数字なので虚偽と判定され、find関数が続きます.
「真」の場合、[name]が「偽」であることを完了した値だけが返されます.
この場合、[name]が完了した後に発生する可能性のある値が0である場合、または「name」に対応するペアが完了していない場合、未定義の値が返されます.ではfalseは車に戻されます!だからtrueになる答えはもうすぐ開封する
ちなみに、「0」を返すと、「同名の参加者が2人以上いて、そのうちの1人が入ってこないとき」です.
undefinedに戻る場合は「名前が入ってこない、あの人が入ってこないとき」です.
雑談で定義がないから!打った後、手錠で--打ったら
対応するキー値ペアが存在し、値はNaNです.
ちなみに、私はどちらも好きです.
let answer = participant.find((el, index) => el !== completion[index]);
私はやりましたが、上の解法は私の解法よりずっと速いです.疑問な部分はアレイ内のキー値ペアです.
例:
foreachで
['cake', 'ball', 'sauce', 'cake', cake: 2, ball: 1, sauce: 1]
を記録すると身長が見えなくなりますYuiN
foreachがキー値を出さない理由はSymbolに入るから
数字が使えないのは、[name]+1が数字で計算されたからです.
だから理解したのか...
理解できませんでした.
食事をしながらゆっくりもう一度見るべきだと思います.
それよりもfind関数を使っているのでどうなっているのか気になるので探して整理しておきます
Reference
この問題について(混乱したjs文法~), 我々は、より多くの情報をここで見つけました
https://velog.io/@ljh95/어지러운-js문법
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
理解できませんでした.
食事をしながらゆっくりもう一度見るべきだと思います.
それよりもfind関数を使っているのでどうなっているのか気になるので探して整理しておきます
Reference
この問題について(混乱したjs文法~), 我々は、より多くの情報をここで見つけました https://velog.io/@ljh95/어지러운-js문법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol