JS 時間オブジェクトと再帰の問題について
JS の時間オブジェクトと再帰は学習中によく出てくるので、この記事で解説します。
基本的なタイプは何ですか?複合型とは何ですか?特徴は何ですか?
一般的に、JS の基本的な型は主に 5 つの型に分けられます。これらは、スタック メモリに格納される単純なデータ セグメントを指します。針
アンダーファインド: ポインタはありますが、値が割り当てられていません
複雑な型はオブジェクトのみです: 配列、オブジェクト、関数、正規表現を含み、ヒープ メモリに保存されているオブジェクトを参照します。ポインタ (座標) 。このポインタは、オブジェクトが保存されているメモリ内の別の場所を実行します。
次のコードの出力はなぜですか?
var obj1 = {a:1, b:2};var obj2 = {a:1, b:2};console.log(obj1 == obj2); /obj1 が obj2console.log(obj1 = obj2) に等しいかどうかを判断 //obj2 を obj1console.log(obj1 == obj2) に割り当てます。 //obj1 が obj2 に等しいかどうかを再度判断します。 2 つのオブジェクトは異なる位置にあるため、結果は次のようになります: falseObject {a: 1, b: 2}true
コード 現在時刻から指定された日付までの間隔を取得する関数 getIntv を作成しますfunction getIntv(haha){ a= Date.now(); b= Date.parse(haha); c= b-a; d= Math.floor(c/(1000*60*60*24)); e= Math.floor((c-d*1000*60*60*24)/(1000*60*60)); f= Math.floor((c-d*1000*60*60*24-e*1000*60*60)/(1000*60)); g= Math.floor((c-d*1000*60*60*24-e*1000*60*60-f*1000*60)/1000); return ("距除夕还有"+d+"天"+e+"小时"+f+"分钟"+g+"秒") }var str = getIntv("2017-01-27");console.log(str);
function getChsDate(lala){ num=['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一'] var damo = lala.split('-') var b = damo[0].split('') for( var e =0 ;e< damo.length; e++) { for(var i = 0 ;i< b.length ; i++) { for(var f = 0 ;f< num.length ;f++) { if( damo[e] == f.toString() ) { damo[e] = num[f] } if( b[i] == f.toString() ) { b[i] = num[f] } } } } return ( b.join("")+"年"+damo[1]+"月"+damo[2]+"日" ) }var str = getChsDate("2015-11-31")console.log(str)
n 日前の日付を取得する関数を作成します
function getLastNDays(lala) { var damo = new Date().getTime()-(lala*1000*60*60*24); var d2 = new Date(damo) var ad =(d2.getMonth()+1) console.log(d2.getFullYear()+'-'+ad+'-'+d2.getDate()) } getLastNDays(40);
次のようなコードを完成させて、実行時間を取得します:
var Runtime = (function(){ var a,b,c; return { start: function(){ a = Date.now(); //获取现在的时间 console.log(a); }, end: function(){ b = Date.now(); //获取执行后的时间 console.log(b); }, get: function(){ c = b - a; //两者相减得出执行代码的时间。 return (c+"毫秒"); //单位为毫秒 } }; }()); Runtime.start(); for(var i = 0; i<60000 ;i++ ){ //这里计算i循环60000次所需要的时间} Runtime.end();console.log(Runtime.get());
毎回、階段は 200 段あります。 1 つまたは 2 つのレベルを取得します。法則の下から上へ行く方法は何通りありますか?コード (再帰) を使用して
function fn(sum){ if(sum===1){ return 1; } if(sum===2){ return 2; } return fn(sum-1)+fn(sum-2)
}// 階段の歩き方は (1 歩歩いた後 + その後の歩き方) + (2 歩歩いた後 + 次の歩き方) // 1 歩歩くConsole.log (Fn (200)); // 値が大きすぎるのでスタックします
JSON オブジェクトを複数ネストするメソッドを作成します。値は文字列、数値、ブール値、JSON、JSON オブジェクト内の任意の項目ですvar obj={ sex:18, vala:"hello", arr:{ name:"damo" } };function objcopy(obj){ var newobj={}; for(var i in obj){ //遍历对象obj if(typeof obj[i]=== "object"){ //如果对象的值为对象 newobj[i] = objcopy(obj[i]) //将对象赋值为新对象 }else{ newobj[i]=obj[i]; } } return newobj; }var newobj= objcopy(obj);console.log(newobj) //一个新的对象与原对象无关系
var arr=[18, "hello", [2,3,5,6,9],true,];function objcopy(arr){ var newarr=[]; for(var i in arr){ //遍历数组arr if( arr[i] instanceof Array){ //条件:如果对象的值为数组 newarr[i] = objcopy(arr[i]) //将数组内容赋值为新数组 }else{ newarr[i]=arr[i]; } } return newarr; }var newarr= objcopy(arr);console.log(newarr) //一个新的数组与原数组无关系
function arrcopy(num){ var lala; if(num instanceof Array){ lala = []; } else{ lala={}; }
この記事ではそれについて説明します
関連する推奨事項:
DOMオブジェクトのinnerTextとinnerHTMLの違いは何ですか?JSに関するいくつかの基本的な質問
require.jsをフロントエンドjsでモジュール化する方法
以上がJS 時間オブジェクトと再帰の問題についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C++ 関数の再帰の深さは制限されており、この制限を超えるとスタック オーバーフロー エラーが発生します。制限値はシステムやコンパイラによって異なりますが、通常は 1,000 ~ 10,000 の間です。解決策には次のものが含まれます: 1. 末尾再帰の最適化、2. 末尾呼び出し、3. 反復実装。

はい、C++ ラムダ式は std::function を使用して再帰をサポートできます。std::function を使用して Lambda 式への参照をキャプチャします。キャプチャされた参照を使用すると、ラムダ式はそれ自体を再帰的に呼び出すことができます。

再帰アルゴリズムは、関数の自己呼び出しを通じて構造化された問題を解決します。利点は、シンプルで理解しやすいことですが、欠点は、効率が低く、スタック オーバーフローを引き起こす可能性があることです。非再帰アルゴリズムは、明示的に管理することで再帰を回避します。スタック データ構造の利点は、より効率的でスタックのオーバーフローを回避できることですが、欠点はコードがより複雑になる可能性があることです。再帰的か非再帰的かの選択は、問題と実装の特定の制約によって異なります。

末尾再帰最適化 (TRO) は、特定の再帰呼び出しの効率を向上させます。末尾再帰呼び出しをジャンプ命令に変換し、コンテキスト状態をスタックではなくレジスターに保存することで、余分な呼び出しとスタックへの戻り操作を排除し、アルゴリズムの効率を向上させます。 TRO を使用すると、末尾再帰関数 (階乗計算など) を最適化できます。末尾再帰呼び出しを goto ステートメントに置き換えることで、コンパイラーは goto ジャンプを TRO に変換し、再帰アルゴリズムの実行を最適化します。

再帰関数は、文字列処理の問題を解決するためにそれ自体を繰り返し呼び出す手法です。無限再帰を防ぐために終了条件が必要です。再帰は、文字列の反転や回文チェックなどの操作で広く使用されています。

jQuery.val() が使用できない問題を解決するには、具体的なコード例が必要です フロントエンド開発者にとって、jQuery の使用は一般的な操作の 1 つです。その中でも、.val() メソッドを使用してフォーム要素の値を取得または設定する操作は、非常に一般的な操作です。ただし、特定のケースでは、.val() メソッドを使用できないという問題が発生する可能性があります。この記事では、いくつかの一般的な状況と解決策を紹介し、具体的なコード例を示します。問題の説明 jQuery を使用してフロントエンド ページを開発する場合、時々次のような問題が発生します。

再帰的な定義と最適化: 再帰的: 関数は内部的にそれ自体を呼び出し、より小さなサブ問題に分解できる困難な問題を解決します。末尾再帰: この関数は再帰呼び出しを行う前にすべての計算を実行します。これはループに最適化できます。末尾再帰の最適化条件: 再帰呼び出しが最後の操作です。再帰呼び出しパラメータは、元の呼び出しパラメータと同じです。実用的な例: 階乗の計算: 補助関数 Factorial_helper は末尾再帰最適化を実装し、呼び出しスタックを排除し、効率を向上させます。フィボナッチ数の計算: 末尾再帰関数 fibonacci_helper は、最適化を使用してフィボナッチ数を効率的に計算します。

再帰関数のデバッグには、以下のようなテクニックがあります。スタックトレースを確認するデバッグポイントを設定するベースケースが正しく実装されているか確認する再帰呼び出し回数をカウントする再帰スタックを可視化する
