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

資訊專欄INFORMATION COLUMN

8種常用數(shù)組去重方法

vibiu / 2055人閱讀

摘要:種常用數(shù)組去重第一種兩個循環(huán)思路新建一個為空的結(jié)果數(shù)組外層遍歷原數(shù)組,內(nèi)層循環(huán)遍歷返回數(shù)組判斷內(nèi)層循環(huán)數(shù)組當前元素和外層數(shù)組元素的值是否相等,是退出內(nèi)層循環(huán)經(jīng)過第二部后,此時內(nèi)層循環(huán)數(shù)組的索引值和返回數(shù)組的長度正好相等,外層數(shù)組元素也是唯一

8 種常用數(shù)組去重 第一種 【兩個 for 循環(huán)】

思路:

新建一個為空的結(jié)果數(shù)組

外層 for 遍歷原數(shù)組,內(nèi)層循環(huán)遍歷返回數(shù)組

判斷內(nèi)層循環(huán)數(shù)組當前元素和外層數(shù)組元素的值是否相等,是?退出內(nèi)層循環(huán)

經(jīng)過第二部后,此時內(nèi)層循環(huán)數(shù)組的索引值和返回數(shù)組的長度正好相等,外層數(shù)組元素也是唯一的。

/**
 * 【1】2個for循環(huán)去重
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3, "1", "2"]
 */
function unique1(arr) {
  //返回數(shù)組
  var arr2 = [];
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr2.length; j++) {
      //返回數(shù)組和操作數(shù)組的值相等,結(jié)束循環(huán),此時的j值剛好和返回數(shù)組的長度相等
      if (arr2[j] === arr[i]) {
        break;
      }
    }
    //返回數(shù)組和j值相等,則插入該值
    if (arr2.length === j) {
      arr2.push(arr[i]);
    }
  }
  return arr2;
}
第二種 【indexOf 數(shù)組去重】

思路:

新建一個空的結(jié)果數(shù)組

for 循環(huán)原數(shù)組

判斷結(jié)果數(shù)組是否存在當前元素,存在不作操作,不存在壓入結(jié)果數(shù)組

/**
 * 【2】indexOf數(shù)組去重
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3, "1", "2"]
 */
function unique2(arr) {
  //返回的數(shù)組
  var arr2 = [];
  for (var i = 0; i < arr.length; i++) {
    //判斷arr2中是否存在arr[i]值,存在不作任何操作,不存在插入該值
    if (arr2.indexOf(arr[i], 0) === -1) {
      arr2.push(arr[i]);
    }
  }
  return arr2;
}
第三種 【filter 去重】

思路:

使用 filter 返回一個新數(shù)組

返回滿足:當前元素在原數(shù)組中的第一個索引等于當前索引值,則返回當前元素

/**
 * 【3】filter去重【filter返回一個新數(shù)組】
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3, "1", "2"]
 */
function unique3(arr) {
  return arr.filter(function(item, index, arr) {
    //如果當前元素在原數(shù)組中的第一個索引等于當前索引值,則返回當前元素
    return arr.indexOf(item, 0) === index;
  });
}
第四種 【先排序后去重】

思路:

新建一個空的結(jié)果數(shù)組

對原數(shù)組先排序,排序后的數(shù)組,相等元素緊鄰排序

判斷相鄰數(shù)組元素是否相等或者是否為第一個數(shù)組元素,是壓入結(jié)果數(shù)組

/**
 * 【4】先排序后去重
 *
 * @param {any} arr
 * @returns ["1", 1, 13, "2", 2, 3]
 */
function unique4(arr) {
  //數(shù)組排序
  var arr = arr.sort();
  //結(jié)果數(shù)組
  var arr2 = [];
  for (var i = 0; i < arr.length; i++) {
    //第一個數(shù)組或者先一個數(shù)組值不等于當前數(shù)組值,插入該元素
    if (i < 1 || arr[i - 1] !== arr[i]) {
      arr2.push(arr[i]);
    }
  }
  return arr2;
}
第五種 【sort+filter】

思路:思路就是對第三和第四種方法的結(jié)合啦,道理一樣。

/**
 * 【5】sort+filter優(yōu)化【4】方法
 *
 * @param {any} arr
 * @returns ["1", 1, 13, "2", 2, 3]
 */
function unique5(arr) {
  return arr.sort().filter(function(item, index, arr) {
    return item < 1 || arr[index - 1] !== arr[index];
  });
}
第六種 【hasOwnProperty】

思路:這種方法主要是利用對象 hasOwnProperty 判斷是否存在對象屬性

/**
 * 【6】hasOwnProperty【利用:hasWonProperty判斷對象中是否存在對應(yīng)屬性,存在返回true否則返回false】
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3]
 */
function unique6(arr) {
  //創(chuàng)建對象
  var obj = {};
  return arr.filter(function(item, index, arr) {
    //判斷對象是否存在元素,存在給對象賦值,否則返回false
    return obj.hasOwnProperty(item) ? false : (obj[item] = item);
  });
}
第七種 【利用 es6 的 new set()方法】

思路:利用【new Set(數(shù)組)說明:它時一個類數(shù)組方法,但是其成員值都是唯一的;Array.from()可以蔣其他對象轉(zhuǎn)化為數(shù)組】

/**
 * 【7】es6的new set()
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3, "1", "2"]
 */
function unique7(arr) {
  return Array.from(new Set(arr));
}
第八種 【new Set 和 es6 的...運算符】
/**
 * 【8】蔣【7】采用...操作符重寫
 *
 * @param {any} arr
 * @returns [1, 2, 13, 3, "1", "2"]
 */
function unique(arr) {
  return [...new Set(arr)];
}

好了,寫完后驗證一下是否正確:

window.onload = function() {
  var arr = [1, 2, 13, 1, 2, 3, "1", "2"];
  console.log(unique(arr));
};

上面的每個方法的返回值就是調(diào)用當前方法時,返回值。

源碼地址:https://github.com/wqb2017/bo...

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

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

相關(guān)文章

  • 也談面試必備問題之 JavaScript 數(shù)組去重

    摘要:而數(shù)組元素去重是基于運算符的。而如果有迭代函數(shù),則計算傳入迭代函數(shù)后的值,對值去重,調(diào)用方法,而該方法的核心就是調(diào)用方法,和我們上面說的方法一異曲同工。 Why underscore (覺得這部分眼熟的可以直接跳到下一段了...) 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像...

    Coly 評論0 收藏0
  • JavaScript數(shù)組去重(12方法,史上最全)

    摘要:數(shù)組去重,一般都是在面試的時候才會碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數(shù)組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般都是在面試的時候才會碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...

    rozbo 評論0 收藏0
  • 前端常用代碼片段(四)

    摘要:盡量避免使用表達式又稱動態(tài)屬性。使用計算數(shù)組中的重復(fù)項如果你想計算數(shù)組中的每個值有多少重復(fù)值,也可以快速幫到你。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.簡述一下你對HTML語義化的理解?并寫出一段語義化的HTML? 語義化是指根據(jù)內(nèi)容的結(jié)...

    worldligang 評論0 收藏0
  • JS數(shù)組去重總結(jié)

    摘要:數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。在實際項目中碰到的數(shù)組去重,一般都是后臺去處理,很少讓前端處理數(shù)組去重。數(shù)組去重的方法一利用去重中最常用如果不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。 在實際項目中碰到的...

    whinc 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<