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

資訊專欄INFORMATION COLUMN

前端面試之你可能會(huì)遇到的編程題(1)

AbnerMing / 1560人閱讀

摘要:詳見(jiàn)我的另一篇文章前端面試問(wèn)題之面向?qū)ο箢悓?shí)現(xiàn)代碼父類我的名字是我今年歲原型繼承原型鏈相關(guān)問(wèn)題請(qǐng)看我的另一篇文章前端面試之原型鏈問(wèn)題實(shí)現(xiàn)效果構(gòu)造函數(shù)繼承實(shí)現(xiàn)效果組合繼承實(shí)現(xiàn)效果組合繼承優(yōu)化實(shí)現(xiàn)效果未完待續(xù)

Github - program-learning-lists

知乎

個(gè)人博客

Github

“開(kāi)源(open source)”這個(gè)詞,指的是事物規(guī)劃為可以公開(kāi)訪問(wèn)的,因此人們可以修改并分享。

作為一個(gè)從大型同性社交網(wǎng)站GitHub / Rain120上學(xué)習(xí)成長(zhǎng)的一個(gè)前端菜鳥的我,深受大佬的感染,也希望有機(jī)會(huì)能夠給同樣是菜鳥的你們提供幫助,在我學(xué)習(xí)之余,留下了之前學(xué)習(xí)遇到的、網(wǎng)上看到的、筆試面試遇到的一些編程的解法,還請(qǐng)各位大佬手下留情,多多提攜、指點(diǎn)我等菜鳥。

歡迎各位大佬留下更加簡(jiǎn)單的寫法,謝謝!!

代碼倉(cāng)庫(kù): Web-Study

廢話不多說(shuō),先上題吧。

1、關(guān)系型數(shù)組轉(zhuǎn)換成樹形結(jié)構(gòu)對(duì)象(拼多多2018前端筆試真題 / 依圖面試)

關(guān)系型數(shù)組

var obj = [
    { id:3, parent:2 },
    { id:1, parent:null },
    { id:2, parent:1 },
]

期望結(jié)果:

o = {
  obj: {
    id: 1,
    parent: null,
    child: {
      id: 2,
      parent: 1,
      child: {
          id: ,3,
          parent: 2
      }
    }
  }
}

思路:

先找到它的根元素,根據(jù)idparent來(lái)判斷它們之間的關(guān)系

實(shí)現(xiàn)源碼:

function treeObj(obj) {
  obj.map(item => {
    if (item.parent !== null) {
      obj.map(o => {
        if (item.parent === o.id) {
          if (!o.child) {
            o.child = [];
          }
          o.child.push(item);
          o.child = o.child;
        }
      });
    }
  });
  return obj.filter(item => item.parent === null)[0]
}

解法2:(知乎評(píng)論區(qū)提供的方法)

function treeObj(obj) {
  return obj.sort((a, b) => b.parent - a.parent)
      .reduce((acc, cur) => (acc ? { ...cur, child: acc } : cur));
}

實(shí)現(xiàn)效果:

2、請(qǐng)用 javascript 實(shí)現(xiàn)一個(gè)函數(shù) parseUrl(url),將一段 url字符串解析為 Object。(西洋匯筆試)
 parseUrl("http://www.xiyanghui.com/product/list?id=123456&sort=discount#title");

期望結(jié)果:

{
    protocol: "http",
    host: "www.xiyanghui.com",
    path: "/product/list",
    params: {
        id: "12345",
        sort: "discount"
    },
    hash: "title"
}

思路:

首先我們需要了解一下URL這個(gè)概念。

URL(統(tǒng)一資源定位符)(或稱統(tǒng)一資源定位器/定位地址、URL地址等,英語(yǔ):Uniform Resource Locator,常縮寫為URL),有時(shí)也被俗稱為網(wǎng)頁(yè)地址(網(wǎng)址)。

這里,我補(bǔ)充一點(diǎn),各位不僅需要了解 URL,還需要了解 URI

URI:統(tǒng)一資源標(biāo)識(shí)符(英語(yǔ):Uniform Resource Identifier,或URI)是一個(gè)用于標(biāo)識(shí)某一互聯(lián)網(wǎng)資源名稱的字符串。 該種標(biāo)識(shí)允許用戶對(duì)網(wǎng)絡(luò)中(一般指萬(wàn)維網(wǎng))的資源通過(guò)特定的協(xié)議進(jìn)行交互操作。URI的最常見(jiàn)的形式是統(tǒng)一資源定位符(URL),經(jīng)常指定為非正式的網(wǎng)址。更罕見(jiàn)的用法是統(tǒng)一資源名稱(URN),其目的是通過(guò)提供一種途徑。用于在特定的名字空間資源的標(biāo)識(shí),以補(bǔ)充網(wǎng)址。

URI包括了URL和URN。

下圖展示了兩個(gè) URI 例子及它們的組成部分。

URL一般包括協(xié)議域名端口queryparams等,我們?cè)趥魅雲(yún)?shù)時(shí)是字符串,我們需要將它轉(zhuǎn)換成URL,可以通過(guò)創(chuàng)建一個(gè)a標(biāo)簽來(lái)將字符串 轉(zhuǎn)換成URL

實(shí)現(xiàn)源碼:

function parseUrl(url) {   
     var a =  document.createElement("a");   
     a.href = url;   
     return {   
         source: url,   
         protocol: a.protocol.replace(":",""),   
         host: a.hostname,   
         port: a.port,   
         query: a.search,   
         params: (() => {   
             var ret = {}, querys = []; 
             var searchQuery = a.search.replace(/^?/,"").split("&");
             for ( var i = 0;i < searchQuery.length; i++) {   
                 if (searchQuery[i]) { 
                     querys = searchQuery[i].split("=");   
                     ret[querys[0]] = querys[1]; 
                 }  
             }   
             return ret;   
         })(),  
         file: (a.pathname.match(//([^/?#]+)$/i) || [,""])[1],   
         hash: a.hash.replace("#",""),   
         path: a.pathname.replace(/^([^/])/,"/$1"),   
         relative: (a.href.match(/tps?://[^/]+(.+)/) || [,""])[1],   
         segments: a.pathname.replace(/^//,"").split("/")   
    };   
} 
parseUrl("http://www.xiyanghui.com/product/list?id=123456&sort=discount#title");

實(shí)現(xiàn)效果:

3、數(shù)組元素的排列組合問(wèn)題
[1, 2, 3]

期望結(jié)果:

全排列:

[[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]

思路:

每次取數(shù)組中的一個(gè)數(shù),然后將剩余的數(shù),依次加入到該數(shù)的組合數(shù)組中

實(shí)現(xiàn)代碼:

function Permutations (target, size, origin) {
    var _arr = []
    function getArrange(target, nums, ret) {
        if (nums === 1) {
            for (var i = 0; i < target.length; i++) {
                var tmp = ret.slice();
                tmp.push(target[i]);
                _arr.push(tmp);
            }
        } else {
            nums -= 1;
            for (var i = 0; i < target.length; i++) {
                var tmp = ret.slice();
                var newTarget = target.slice();
                tmp.push(target[i]);
                newTarget.splice(i, 1);
                getArrange(newTarget, nums, tmp);
            }
        }
    }
    getArrange(target, size, origin);
    return _arr;
}
Permutations([1, 2, 3], 2, [])

實(shí)現(xiàn)效果:

[1, 2, 3, 4]

排列組合:

[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]

思路:

取一個(gè)數(shù),加入到數(shù)組中,接著再取一個(gè)數(shù)加入數(shù)組,直到需要的num為0。

實(shí)現(xiàn)代碼:

function Permutations (arr, nums) {
  var ret = [];

  function getRet(origin, target, nums) {
    if (nums === 0) {
      ret[ret.length] = origin;
      return;
    }
    for (var i = 0; i <= target.length - nums; i++) {
      var tmp = origin.slice();
      tmp.push(target[i]);
      getRet(tmp, target.slice(i + 1), nums - 1);
    }
  }
  getRet([], arr, nums);
  return ret;
}
Permutations([1, 2, 3, 4], 3)

實(shí)現(xiàn)效果:

4、JS如何判斷一組數(shù)字是否連續(xù)(百詞斬筆試題)
// 當(dāng)出現(xiàn)連續(xù)數(shù)字的時(shí)候以‘-’輸出
[1, 2, 3, 4, 6, 8, 9, 10]

期望結(jié)果:

["1-4", 6, "8-10"]

原理:

判斷前后數(shù)字是否相差為1,如果是則加入同一個(gè)數(shù)組

實(shí)現(xiàn)代碼:

判斷是否連續(xù):

var arrange = function(arr){
    var result = [],temp = [];
    arr.sort(function(source, dest){
        return source - dest;
    }).concat(Infinity).reduce(function(source, dest){
        temp.push(source);
        if(dest-source > 1){
            result.push(temp);
            temp = [];
        }
        return dest;
    });
    return result;
};

實(shí)現(xiàn)效果:

格式化實(shí)現(xiàn):

var formatarr = function(arr) {
    var newArr = []
    var arr1 = arrange(arr)
    for (var i in arr1) {
        var str = "";
        if (arr1[i].length > 1) {
            str = arr1[i][0] + "-" + arr1[i][arr1[i].length - 1];
            newArr.push(str)
        } else {
            newArr.push(arr1[i][0]);
        }
   }
   return newArr;
}

實(shí)現(xiàn)效果:

5、創(chuàng)建子類Child,使用原型和構(gòu)造函數(shù)的方式繼承父類People的方法,并調(diào)用say函數(shù)說(shuō)出姓名和年齡。(詳見(jiàn)我的另一篇文章前端面試問(wèn)題之面向?qū)ο箢?

實(shí)現(xiàn)代碼:

父類:

function People(name,age){
     this.name=name;
     this.age=age;
     this.say=function(){
         console.log("我的名字是:"+this.name+"我今年"+this.age+"歲!");
     };
}

原型繼承:(原型鏈相關(guān)問(wèn)題請(qǐng)看我的另一篇文章前端面試之原型鏈問(wèn)題)

function Child(name, age){
    this.name = name;
    this.age = age;
}
Child.prototype = new People();
var child = new Child("Rainy", 20);
child.say()

實(shí)現(xiàn)效果:

構(gòu)造函數(shù)繼承

function Child(name, age){
    People.call(this)
    this.name = name;
    this.age = age;
}
var child = new Child("Rainy", 20);
child.say()

實(shí)現(xiàn)效果:

組合繼承:

function Child(name, age){
    People.call(this);
    this.name = name;
    this.age = age;
}
Child.prototype = People.prototype;
var child = new Child("Rainy", 20);
child.say()

實(shí)現(xiàn)效果:

組合繼承優(yōu)化:

function Child(name, age){
    People.call(this);
    this.name = name;
    this.age = age;
}
Child.prototype = Object.create(People.prototype);
Child.prototype.constructor = Child;
var child = new Child("Rainy", 20);
child.say()

實(shí)現(xiàn)效果:

未完待續(xù)

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

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

相關(guān)文章

  • 寫給初入門/半路出家前端er

    摘要:半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。年,馮馮同事兼師兄看我寫太費(fèi)勁,跟我說(shuō)對(duì)面樓在找,問(wèn)我要不要學(xué),說(shuō)出來(lái)可能有點(diǎn)丟人,但是在那之前,我真得不知道什么是,什么是。 半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。 為何會(huì)走向前端 非計(jì)算機(jī)專業(yè)的我,畢業(yè)之后,就職于一家電力行業(yè)公司,做過(guò)設(shè)備調(diào)試、部門助理、測(cè)試,也寫過(guò)一段時(shí)間的QT,那三年的時(shí)間,最難過(guò)的不是工作忙不忙,...

    Cc_2011 評(píng)論0 收藏0
  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...

    wangjuntytl 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)面試鏈接

    摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集前端面試題目及答案匯總史上最全前端面試題含答案常見(jiàn)前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過(guò)程中最容易出現(xiàn)的問(wèn)題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集:http://www.codec...

    h9911 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)面試鏈接

    摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集前端面試題目及答案匯總史上最全前端面試題含答案常見(jiàn)前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過(guò)程中最容易出現(xiàn)的問(wèn)題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問(wèn)題收集:http://www.codec...

    snifes 評(píng)論0 收藏0
  • 面試篇】寒冬求職季之你必須要懂原生JS(上)

    摘要:循環(huán)可以使用的范圍包括數(shù)組和結(jié)構(gòu)某些類似數(shù)組的對(duì)象對(duì)象,以及字符串。只能遍歷數(shù)組,不能中斷,返回值是修改后的數(shù)組。除了之外,等,也有同樣的問(wèn)題。聲明一個(gè)只讀的常量。這在語(yǔ)法上,稱為暫時(shí)性死區(qū)。暫時(shí)性死區(qū)也意味著不再是一個(gè)百分百安全的操作。 互聯(lián)網(wǎng)寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包...

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

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

0條評(píng)論

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