国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

javascript的有趣邏輯片段

xingqiba / 2900人閱讀

摘要:準(zhǔn)備面試的刷題過(guò)程中,遇到了一些題,比較有意思,輕巧??杀硎救缦陆o出參數(shù)表示當(dāng)前字符串中從下標(biāo)為的字符開(kāi)始的長(zhǎng)度為的一個(gè)子串。反反拼接新的字符串結(jié)合,返回二維數(shù)組中每個(gè)一維數(shù)組的最大值用實(shí)現(xiàn)一個(gè)數(shù)組合并的方法要求去重。

準(zhǔn)備面試的刷題過(guò)程中,遇到了一些題,比較有意思,輕巧。
加強(qiáng)運(yùn)用一下js原生語(yǔ)法,多解。

題目來(lái)源:https://github.com/rmurphey/j...
A test-driven approach to assessing JS skills

統(tǒng)計(jì)數(shù)組 arr 中值等于 item 的元素出現(xiàn)的次數(shù)

function count(arr, item) {
     var count = 0;
     arr.forEach(function(e){
         //e為arr中的每一個(gè)元素,與item相等則count+1
         e == item ? count++ : 0;
     });
     return count;
 }

function count(arr, item) {
    return arr.filter(function(a){
        return (a==item);
    }).length
}

function count(arr, item) {
    var res;
    return (res = arr.toString().match(new RegExp(""+item+"","g")))?res.length:0;
}

function count(arr, item) {
            var count = 0;
            arr.map(function(a) {
                if(a === item) {
                    count++;
                }
            });
            return count;
        }
        

為數(shù)組 arr 中的每個(gè)元素求二次方。不要直接修改數(shù)組 arr,結(jié)果返回新的數(shù)組

function square(arr) {
    return arr.map(function(item,index,array){
        return item*item;
    })
}

function square(arr) {
   //聲明一個(gè)新的數(shù)組存放結(jié)果
     var a = [];
     arr.forEach(function(e){
         //將arr中的每一個(gè)元素求平方后,加入到a數(shù)組中
         a.push(e*e);
     });
     return a;
 }

function square(arr) {
//復(fù)制一個(gè)arr數(shù)組
    var newarr = arr.slice(0);
    for (var i=0;i

將數(shù)組 arr 中的元素作為調(diào)用函數(shù) fn 的參數(shù)

function argsAsArray(fn, arr) {
  return fn.apply(this, arr);
 }

function argsAsArray(fn, arr) {
    return function(para1,para2){ 
        return  para1.apply(this,para2);
    }(fn,arr);
}

完成函數(shù) createModule,調(diào)用之后滿足如下要求:

1、返回一個(gè)對(duì)象
2、對(duì)象的 greeting 屬性值等于 str1,name 屬性值等于 str2
3、對(duì)象存在一個(gè) sayIt 方法,該方法返回的字符串為 greeting屬性值 + ", " +name屬性值

function createModule(str1, str2) {
     var obj = {
         greeting : str1,
         name     : str2,
         sayIt    : function(){
             //兩個(gè)屬性前面都需要加上this
             return this.greeting+", "+this.name;
         }
     };
     return obj;
 }

//使用構(gòu)造函數(shù)法
function createModule(str1, str2) {
    function Obj(){
        this.greeting = str1;
        this.name = str2;
        this.sayIt = function(){
            return this.greeting + ", " + this.name;
        };
    }
    return new Obj();
}

//構(gòu)造函數(shù)與原型組合
function createModule(str1, str2) {
    function CreateMod(){
        this.greeting = str1;
        this.name = str2;
    }
    CreateMod.prototype.sayIt = function(){
        return this.greeting + ", "  + this.name;
    }
    return new CreateMod();
}

已知 fn 為一個(gè)預(yù)定義函數(shù),實(shí)現(xiàn)函數(shù) curryIt,調(diào)用之后滿足如下條件:

1、返回一個(gè)函數(shù) a,a 的 length 屬性值為1(即顯式聲明 a 接收一個(gè)參數(shù))
2、調(diào)用 a 之后,返回一個(gè)函數(shù) b, b 的 length 屬性值為 1
3、調(diào)用 b之后,返回一個(gè)函數(shù) c, c 的 length 屬性值為 1
4、調(diào)用 c 之后,返回的結(jié)果與調(diào)用 fn 的返回值一致
5、fn的參數(shù)依次為函數(shù) a, b, c 的調(diào)用參數(shù)

輸入例子:

var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);
function curryIt(fn) {
     //獲取fn參數(shù)的數(shù)量
     var n = fn.length;
     //聲明一個(gè)數(shù)組args
     var args = [];
     //返回一個(gè)匿名函數(shù)
     return function(arg){
         //將curryIt后面括號(hào)中的參數(shù)放入數(shù)組
         args.push(arg);
         //如果args中的參數(shù)個(gè)數(shù)小于fn函數(shù)的參數(shù)個(gè)數(shù),
         //則執(zhí)行arguments.callee(其作用是引用當(dāng)前正在執(zhí)行的函數(shù),這里是返回的當(dāng)前匿名函數(shù))。
         //否則,返回fn的調(diào)用結(jié)果
         if(args.length < n){
            return arguments.callee;
         }else return fn.apply("",args);
     }
 }

function curryIt(fn) {
    return function a(xa){
        return function b(xb){
            return function c(xc){
                return fn.call(this,xa,xb,xc);
            };
        };
    };
}

數(shù)組中輸出元素位置

function indexof(arr,item){
    for(var i = 0,len = arr.length;i

數(shù)組求和

function sum(arr) {
    return eval(arr.join("+"));
};

刪除給定元素

   function remove(arr, item) {
        for(var i=0, m=arr.length, res=[]; i-1;i=newA.indexOf(item)){
        newA.splice(i,1);
    }
    return newA;
}

將函數(shù)放入數(shù)組,參數(shù)放入函數(shù),調(diào)用數(shù)組里面的函數(shù),返回函數(shù)執(zhí)行的結(jié)果。

function makeclosures(arr,fn){
    var funcs = [];
    for(var i = 0;i

將函數(shù)a暫時(shí)保存在一個(gè)內(nèi)建函數(shù)result中,返回這個(gè)result函數(shù),再執(zhí)行.(有閉包,call/apply)

partialUsingArguments(test,a,b)(c,d);//用法

function partialUsingArguments(fn){
    var args1  = Array.prototype.slice.call(arguments,1);
    var result = function(){
        var args2 = Array.prototype.slice.call(arguments,0);
        var args = args1.concat(args2);
        return fn.apply(null,args);
    }
    return result;
}

判斷字符串是否連續(xù)重復(fù)(若是,則返回true)

function containRepeatingLetter(str){
    var re = /[a-zA-Z]/;
    for(var i = 0,len = str.length;i

如下的結(jié)果是?

var m= 1, 
j = k = 0; 
function add(n) { 
    return n = n+1; 
  } 
y = add(m);   //4
function add(n) { 
    return n = n + 3; 
} 
z = add(m);   //4


所有聲明的函數(shù)都會(huì)被提前。所以function add(){}定義的函數(shù)會(huì)優(yōu)先解析,而不是順序解析;因此整個(gè)過(guò)程中,首先依次解析兩個(gè)add function,由于同名,所以后者會(huì)覆蓋前者;然后,順序解析其余的JS代碼,y = add(m);語(yǔ)句和z = add(m); 語(yǔ)句調(diào)用的都是第二個(gè)add function,因此返回的都是4.

如下的結(jié)果是?

 (function() {
          var a = b = 5;
      })();   
    console.log(b);  //5
    console.log(a);   //a is not defined
    
    

vara=b=5;其中var a表示a為當(dāng)前作用域的全局變量,b=5并沒(méi)有定義為當(dāng)前作用域的全局變量,它會(huì)申明提前在全局作用域中。
可表示如下:

var b=5;
(function() {
      var a = b ;
  })();        
  console.log(b);  //5
  console.log(a);   //a is not defined      
  
  

給出參數(shù) str,start,end 表示當(dāng)前字符串中從下標(biāo)為 start 的字符開(kāi)始的長(zhǎng)度為 end
的一個(gè)子串。你要將這個(gè)子串左右翻轉(zhuǎn)后插在這個(gè)子串原來(lái)位置的正后方,求最后得到的字符串是什么。

  
 function reverseString(str,start,end){
     var slice = str.slice(start,end);
     var sliceReverse = slice.split("").reverse().join(""); //string -> array ->反array -> 反string
     var reverseString = str.slice(0,start+end)+sliceReverse+str.slice(start+end); //拼接新的字符串
     return reverseString;
}     

apply,bind(es5)結(jié)合,返回二維數(shù)組中每個(gè)一維數(shù)組的最大值

function largestOfFour(arr) {
  return arr.map(Function.apply.bind(Math.max, null));
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

用JS實(shí)現(xiàn)一個(gè)數(shù)組合并的方法(要求去重)。

var arr1 = ["a"];
var arr2 = ["b", "c"];
var arr3 = ["c", ["d"], "e", undefined, null];

var concat = (function(){
  // concat arr1 and arr2 without duplication.
  var concat_ = function(arr1, arr2) {
    for (var i=arr2.length-1;i>=0;i--) {
      arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0;
    }
  };
  // concat arbitrary arrays.
  // Instead of alter supplied arrays, return a new one.
  return function(arr) {
    var result = arr.slice();
    for (var i=arguments.length-1;i>=1;i--) {
      concat_(result, arguments[i]);
    }
    return result;
  };
}());

為字符串實(shí)現(xiàn)一個(gè)render方法,實(shí)現(xiàn)下面的變量替換功能

var greeting = "my name is $(name),age $(age)";
var result = greeting.render({name:"XiaoMing",age:11});
console.log(result); // my name is XiaoMing,age 11

answer:

 String.prototype.render = function(option){
        var s = this,
                reg;
        Object.keys(option).forEach(function(k){
            reg = new RegExp("$("+k+")","g");
            s = s.replace(reg,option[k])
        });
        return s
    };

    var greeting = "my name is $(name),age $(age)";
    var result = greeting.render({name:"XiaoMing",age:11});
    console.log(result); // my name is XiaoMing,age 11

取字符串中間的字符,奇數(shù)取1,偶數(shù)取2

function getMiddle(str){
   return str.substr(Math.ceil(str.length/2-1),str.length % 2 == 0 ? 2: 1)
 }
var p1 = getMiddle("test"); //es
    var p2 = getMiddle("testing"); //t
    var p3 = getMiddle("middle"); //dd
    var p4 = getMiddle("A"); //A

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/80362.html

相關(guān)文章

  • 翻譯_20行代碼創(chuàng)造JavaScript模板引擎(一)

    摘要:翻譯行代碼創(chuàng)造模板引擎一想看博客原文鏈接,請(qǐng)點(diǎn)擊下方一個(gè)非常好用的學(xué)習(xí)正則表達(dá)的網(wǎng)站正則表達(dá)式圖文解說(shuō)網(wǎng)站譯文事情的起因,我想編寫(xiě)一個(gè)邏輯簡(jiǎn)單的模板引擎,它可以很好滿足我現(xiàn)在的需求。,表示全局匹配。 翻譯_20行代碼創(chuàng)造JavaScript模板引擎(一) 想看博客原文鏈接,請(qǐng)點(diǎn)擊下方 JavaScript template engine in just 20 lines 一個(gè)非常好用...

    hiyang 評(píng)論0 收藏0
  • [譯] 只有 20 行 JavaScript 模板引擎

    摘要:原文鏈接譯者吐槽只收藏不點(diǎn)贊都是耍流氓前言我仍舊在為我的預(yù)處理器進(jìn)行開(kāi)發(fā)工作。它原本是一個(gè)預(yù)處理器,但之后它擴(kuò)展成為了預(yù)處理器,很快它將支持到的轉(zhuǎn)換。 原文鏈接:JavaScript template engine in just 20 lines (譯者吐槽:只收藏不點(diǎn)贊都是耍流氓) 前言 我仍舊在為我的JS預(yù)處理器AbsurdJS進(jìn)行開(kāi)發(fā)工作。它原本是一個(gè)CSS預(yù)處理器,但之后它擴(kuò)...

    leon 評(píng)論0 收藏0
  • javascript知識(shí)點(diǎn)

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類(lèi)型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫(xiě)代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評(píng)論0 收藏0
  • 【翻譯】Web渲染概述

    摘要:由我所在的團(tuán)隊(duì)共同翻譯完成,并發(fā)布在前端技術(shù)公眾號(hào)方凳雅集上,轉(zhuǎn)載于此。在移動(dòng)端,客戶(hù)端渲染很難獲得并保持一個(gè)較快的渲染速度。使用技術(shù)進(jìn)行服務(wù)端渲染的主要問(wèn)題在于它會(huì)對(duì)可交互時(shí)間有明顯的負(fù)面影響,盡管它縮短了首次繪制時(shí)間 本文簡(jiǎn)單介紹了web應(yīng)用各種渲染方案,其中包括客戶(hù)端渲染、服務(wù)器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...

    RobinQu 評(píng)論0 收藏0
  • 【翻譯】Web渲染概述

    摘要:由我所在的團(tuán)隊(duì)共同翻譯完成,并發(fā)布在前端技術(shù)公眾號(hào)方凳雅集上,轉(zhuǎn)載于此。在移動(dòng)端,客戶(hù)端渲染很難獲得并保持一個(gè)較快的渲染速度。使用技術(shù)進(jìn)行服務(wù)端渲染的主要問(wèn)題在于它會(huì)對(duì)可交互時(shí)間有明顯的負(fù)面影響,盡管它縮短了首次繪制時(shí)間 本文簡(jiǎn)單介紹了web應(yīng)用各種渲染方案,其中包括客戶(hù)端渲染、服務(wù)器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...

    NervosNetwork 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<