摘要:種常用數(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
摘要:而數(shù)組元素去重是基于運算符的。而如果有迭代函數(shù),則計算傳入迭代函數(shù)后的值,對值去重,調(diào)用方法,而該方法的核心就是調(diào)用方法,和我們上面說的方法一異曲同工。 Why underscore (覺得這部分眼熟的可以直接跳到下一段了...) 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像...
摘要:數(shù)組去重,一般都是在面試的時候才會碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數(shù)組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般都是在面試的時候才會碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...
摘要:盡量避免使用表達式又稱動態(tài)屬性。使用計算數(shù)組中的重復(fù)項如果你想計算數(shù)組中的每個值有多少重復(fù)值,也可以快速幫到你。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.簡述一下你對HTML語義化的理解?并寫出一段語義化的HTML? 語義化是指根據(jù)內(nèi)容的結(jié)...
摘要:數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。在實際項目中碰到的數(shù)組去重,一般都是后臺去處理,很少讓前端處理數(shù)組去重。數(shù)組去重的方法一利用去重中最常用如果不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。 在實際項目中碰到的...
閱讀 1125·2021-11-24 10:21
閱讀 2561·2021-11-19 11:35
閱讀 1662·2019-08-30 15:55
閱讀 1293·2019-08-30 15:54
閱讀 1192·2019-08-30 15:53
閱讀 3498·2019-08-29 17:21
閱讀 3308·2019-08-29 16:12
閱讀 3412·2019-08-29 15:23