2019前に問題をまとめます.

35240 ワード

常に試験される配列方法:(1)、arr.join():配列要素を列にして文字列(2)、arr.sort():昇順で配列項目を並べます.つまり一番小さい値は一番前にあり、一番大きい値は一番後ろにあります.(3)、arr.reverse():配列項目の順序を反転します.(4)、arr.co ncat():パラメータを元の配列に追加します.この方法は、現在の配列のコピーを作成し、受信したパラメータをこのコピーの末尾に追加し、最後に新規に構築された配列を返します.concat()方法にパラメータを渡さない場合、現在の配列をコピーしてコピーを返します.(5)、arr.slice():元の配列から下付きから下付きまでの項目を指定する新しい配列を返します.slice()方法は、1つまたは2つのパラメータ、すなわち、戻り値の開始位置および終了位置を受け入れることができる.一つのパラメータしかない場合、slice()方法は、このパラメータ指定位置から現在の配列の最後までのすべての項目を返します.二つのパラメータがある場合、この方法は開始位置と終了位置の間の項を返します.ただし、終了位置の項目は含まれません.パラメータが負の場合は、負の項目に配列の長さを加算します.例えば、arr.slice(-1、-4)==arr.length-1、arr.length-4);(6)、arr.splice():削除:任意の数の項目が削除されます.2つのパラメータを指定するだけで、削除する最初の項目の位置と削除するエントリの数が指定されます.例えば、splice(0,2)は、配列の最初の2つを削除します.
挿入:指定された位置に任意の数の項目を挿入することができます.3つのパラメータが必要です.開始位置、0(削除するエントリ数)、挿入する項目.例えば、splice(2,0,4,6)は、現在の配列の位置2から4と6を挿入します.代替:指定された位置に任意の数の項目を挿入し、任意の数の項目を同時に削除します.3つのパラメータを指定するだけで、開始位置、削除すべき項目数、挿入するべき個数の項目を指定します.挿入された項の数は、削除された項の数に等しい必要はありません.例えば、splice(2,1,4,6)は、現在の配列位置2の項目を削除し、位置2から4と6を挿入します.
splice()方法は常に1つの配列を返します.この配列には元の配列から削除された項目が含まれています.削除されていない場合は空の配列を返します.(コピーは生成されません.直接に元の配列を変更し、新しい配列を返します.)
(7)、indexOf()、およびlastIndexOf():(インデックス値を返す)indexOf(左から右へ):一つのパラメータ:検索項目の二つのパラメータ:最初のパラメータは検索する項目を表し、二つ目は検索の開始インデックスを表します.クエリーは返されませんでした.-1 lastIndexOf(右から左へ):インデックスを数えるときは、左から右へ(8)、forEach():行列を巡回して、配列内の各項目に関数を実行します.この方法は戻り値がない.var arr=[1,2,3,4,5]arr.forEach(function(x,index,b){consolie.log(x,index,b)}(9)、map():「マッピング」を指し、配列内の各項目に対して所定の関数を実行し、毎回の関数呼び出しの結果からなる配列を返します.この方法は戻り値があります.(10)、filter():「フィルタ」機能は、配列内の各項目が与えられた関数を実行し、フィルタ条件を満たす配列を返します.(11)、every()とsome()evry:配列の各項目に条件を満たしてからtrueに戻ります.some:配列の中の一つに条件を満たすとtrueに戻ります.詳細参照:js配列方法大全書
1、文字列をランダムに乱す
//         
    var  str="idfjdifndi";
    function suffle(str) {
        var arr=str.split("");//        
        var len=arr.length;
        for(var i=0;i<len;i++){
            var randomIndex=Math.floor(Math.random()*len);//        
            var itemIndex=arr[randomIndex];
            arr[randomIndex]=arr[i];
            arr[i]=itemIndex;
        }
        return arr.join().replace(/,/g,"");//             。
    }

    console.log(suffle(str)); //typeof:string
二、再帰的に1 x 2+3 x 4+5 x 6+…(n-1)nを実現する.
//         ,    for  
 function digui(n) {
        if(n==1){
            return 1;
        }
        return n*digui(n-1);
    }

    console.log(digui(5));
三、印刷問題:
var arr1=new Array(6);//[ , , , , , ]   6     
var arr2=new Array(6,6);//[6,6]

 for(var i=0;i<10;i++){
        setTimeout(function () {
            console.log(i)
        },i*1000)
    }//10 10

for(let i=0;i<10;i++){
        setTimeout(function () {
            console.log(i)
        },i*1000)
    }//0,1,2,3,4,5,6,7,8,9

 var foo=1;
    (function () {
        foo=2;
        function foo() {
        }
        console.log(foo);//2

    })();
    console.log(foo);//1

Array.isArray(Array.prototype)//true
console.log(Array.prototype)//typeOf:Object
==  Array.prototype   ,     ==


   [1,2,3].map(parseInt)//[1, NaN, NaN]
四、逆順の文字列
  function reserveStr(str) {
        return str.split('').reverse().join('');
    }
    console.log(reserveStr("nice"));
五、出力文字列に重複がない項目
//       
  var str='abcabagmmfd'//  cgfd
    function noRepeatString(str){
        var arr=str.split('');
        var arr1=[];
        var arr2=[];
        var arr3=[];
        var arr4=[];
     /*   arr.forEach(function (obj,n,m) {
            //console.log(obj);
            if(arr1.indexOf(obj)==-1){
                t++;
                console.log(t);
                arr1.push(obj);
            }
        });*/
        for(var i=0;i<arr.length;i++){
           if(arr1.indexOf(arr[i])==-1){
               arr1.push(arr[i]);
           }
        }

        for(var i=0;i<arr1.length;i++) {
            var t=0;
            for (var j = 0; j< arr.length; j++) {
                if (arr1[i] == arr[j]) {
                    t++;
                    if(t>1){
                        arr2.push(arr1[i])
                    }
                }
            }
        }

        for(var i=0;i<arr2.length;i++){
            if(arr3.indexOf(arr2[i])==-1){
                arr3.push(arr2[i]);
            }
        }
        console.log(arr3);

        for(var i=0;i<arr1.length;i++){
            if(arr3.indexOf(arr1[i])==-1){
                arr4.push(arr1[i]);
            }
        }

        return arr4.join('');
    }
    console.log(noRepeatString(str));
//       
var str='abcabagmmfd';
function noRepeatStr2(str){
	var json={};
	var arrBase=str.split('');
	var result='';
	for(var x in arrBase){
	    if(json[arrBase[x]]){
	        json[arrBase[x]]++;
	    }else{
	        json[arrBase[x]]=1;
	    }
	}
	for(var s in json){
	    if(json[s]==1){
	        result+=s
	    }
	}
}
console.log(noRepeatStr2(str));
六、フィボナッチの数列の前n項
一つの数列:1、1、2、3、5、8、13、21、34、…100番目の数を求めたらいくらですか?
    function fib(num) {
        var arr = [];
        if(num == 1){
            return arr = [1];
        }else if(num == 2){
            return arr = [1,1];
        }else{
            arr = [1,1];
            var a=1;
            var b=1;
            var c=2;
            var arrlen =arr.length;
            for(var i=2;i<num;i++){
                arr.push(c);
                a=b;
                b=c;
                c=a+b;
            }
            return arr[num-1];

        }

    }

console.log(fib(100));
//2019/03/09もっと!!!
七、ES 6モジュール化はどうやって使いますか?開発環境はどうやって包装しますか?
どのように使いますか?1:モジュールごとに一回だけロードして、JSごとに一回だけ実行して、もし次回また同じディレクトリの下でファイルをロードするならば、直接メモリの中から読みます.一つのモジュールは一つの例、或いは一つの対象です.2:各モジュール内で宣言されている変数は、ローカル変数であり、グローバルスコープを汚染しません.3:モジュール内部の変数または関数はexportで導出できます.4:モジュールは他のモジュールを導入してどのように包装しますか?まずプロジェクトディレクトリを生成します.
  • main.js-webpackの読み取りファイルのメインエントランス
  • source-webpack処理が必要なファイルとコードを格納する
  • build-webpackプロファイル
  • node_modules-nodeモジュールインストールディレクトリ
  • public-パッケージ化時、デフォルトではファイルをpublicディレクトリ
  • に生成します.
  • .babelrc-babelのプロファイル
  • package.json-nodeプロファイル
  • 八、クラスと普通の構造関数の違い:
  • Classは、構文的に、対象に向けた書き方をより適切にする
  • .
  • クラスは相続を実現する上でより読みやすく、理解しやすいです.
  • Javaなどのバックエンド言語を書きやすいです.本質はやはりシンタックスです.prototype
  • を使います.
    九、Promiseの基本使用と原理:
    基本使用(コード):function関数名(){return new Promise]//非同期操作が成功したときに呼び出すと、結果をパラメータとして送ることができます.
    }).then();
    
    )原理:コンストラクタPromiseは一つの関数resoverを受け入れて、一つの非同期タスクに入ると理解できます.一つは成功時のフィードバックです.一つは失敗時のコールです.この二つのパラメータとthenを通して入ってきたパラメータは対等です.次はthenの実装です.Promise要求thenはpromiseに戻らなければならないので、then呼び出し時に呼び出されます.新たにプロミセを作成します.現在のプロミセのチャンネルにかけます.同じプロミスは何度も呼び戻す前に生成された「u next」だけです.thenメソッドによって受け入れられた二つのパラメータは選択できます.また、タイプも制限されていません.関数でもいいし、具体的な値でもいいです.他のプロミセでもいいです.
    十、ES 6の他の常用機能をまとめます.
  • Default Parameeters(デフォルトパラメータ)//ES 6を使用するデフォルトパラメータfunction sayHello 2(name="tom"){/このパラメータを伝えないとデフォルト値があります.consone.logs(Hello ${name})//テンプレート文字列}
  • Template Literals(テンプレートテキスト)
  • Multi-LINE Strigs(複数行文字列)
  • Destructuring Asignment:直接1つの配列に戻り、その後、配列中の値が自動的にその値を受信する変数に解析されます.function getVal(){1,2];var[x,y]=getVal()//関数戻り値の解釈solie.logy+1
  • Enhanced Object Literals(拡張対象テキスト)
  • Arrow Functions(矢印関数)
  • Promise
  • Block-Coped Costructs Let and Const(ブロックスコープ構造Let and Const)
  • クラス
  • Modules(モジュール)
  • 十一、単スレッドとは何ですか?異歩と何の関係がありますか?
    シングルスレッド:プログラム実行時に、プログラムパスは連続的に並べられています.前に処理しなければいけません.後に実行されます.非同期との関係:jsはシングルスレッドです.彼の宿主環境であるブラウザはマルチスレッドであり、イベントドライブによってjsは非同期属性が発生します.ブラウザはjsのために主線プログラムを作成してタスク(関数)を実行します.これらのタスクは一回に1つしか実行できません.列を作って実行待ちます.しかし、フロントエンドのいくつかのタスクは非常に時間がかかります.(ネットワーク要求、タイマーなど)ので、ブラウザはこれらのタスクを維持します.また、新しいスレッドを開いて、これらのタスクは非同期になります.したがって、シングルスレッドと非同期は必然的な関係です.
    十二、JS非同期を解決する方案は何がありますか?
    1、calback 2、Promise’3、Generator 4、async/await
    十三、diffアルゴリズム
    JSはページをレンダリングする際に、VNode(Jsオブジェクト)となります.このjsオブジェクトにはサイン、属性、サブ要素、テキスト情報などのノードの基本的な属性が含まれています.状態が変更されると、このJavaScriptオブジェクトを新たに構築し、その後、新たにレンダリングされたオブジェクトと古いオブジェクトで比較して、2つのツリーの違いを記録します.記録したのは私たちが変えるべきところです.
    14、文字列の中でURLに一致する
    	var str="     https://www.httalk.top  https://www.httalk.xin/blog/index.html  !";
        var reg=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/g;
        console.log(str.match(reg));//