摘要:編寫雙重循環(huán)去重當(dāng)出現(xiàn)相同的元素時,刪除重復(fù)的元素哈希表形式查詢對象是否存在當(dāng)前元素屬性借助方法查詢空數(shù)組里面是否已經(jīng)存在這個值,不存在則推入編寫單元測試輸出通過來實現(xiàn)是比較優(yōu)雅的姿勢。
編寫uniqueArray.js
var Unique = { /** * 雙重循環(huán)去重 * @param arr * @returns {*} */ dbloop: function (arr) { var i, j, res = []; for (i = 0; i < arr.length; i++) { for (j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j--, 1);//當(dāng)出現(xiàn)相同的元素時,刪除重復(fù)的元素 } } } return arr; }, /** * 哈希表形式 * @param arr * @returns {Array} */ hash: function (arr) { var i, hash = {}, res = []; //查詢hash對象是否存在當(dāng)前元素(屬性) for (i = 0; i < arr.length; i++) { if (!hash[arr[i]]) { res.push(arr[i]); hash[arr[i]] = true; } } return res; }, /** * 借助indexOf方法 * @param arr * @returns {Array} */ indexOf: function (arr) { var i, res = []; //查詢空數(shù)組里面是否已經(jīng)存在這個值,不存在則推入 for (i = 0; i < arr.length; i++) { if (res.indexOf(arr[i]) === -1) { res.push(arr[i]); console.log(arr[i]); } } return res; } }; module.exports = Unique;
編寫單元測試
var expect = require("chai").expect, unique = require("../uniqueArray"); describe("Test unique array function", function () { var arr = [1, 1, 2, 4, 3, 4, 4, 5, 1]; var res = [1, 2, 4, 3, 5]; it("# hash table test", function () { expect(unique.hash(arr)).to.be.deep.equal(res); }); it("# indexof test", function () { expect(unique.hash(arr)).to.be.deep.equal(res); }); it("# double loop test", function () { expect(unique.dbloop(arr)).to.be.deep.equal([2, 3, 4, 5, 1]); }); });
輸出:
Test unique array function ? # hash table test ? # indexof test ? # double loop test 3 passing (24ms)
通過hash來實現(xiàn)是比較優(yōu)雅的姿勢。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79082.html
摘要:方式使用獲取并刪除刪除數(shù)組的第一個元素,判斷這個元素是否還存在于數(shù)組中,如果存在則說明這個元素的是重復(fù)的如果不存在,進行操作方式建立一個哈希表,通過對象屬性查詢?nèi)コ貜?fù)元素方式思路和方式類似,但是簡潔很多來源個人博客 方式1:使用shift()獲取并刪除刪除數(shù)組的第一個元素,判斷這個元素是否還存在于數(shù)組中,如果存在則說明這個元素的是重復(fù)的;如果不存在,進行push()操作 functi...
摘要:此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn)當(dāng)然也會加上我對導(dǎo)圖的詳解目的是為了更方便快捷的記憶和回憶算法重點不用每次都重復(fù)看題解畢竟算法不是做了一遍就能完全記住的所 ...
摘要:三種方法利用判斷新數(shù)組中實際上也是使用的類似的傳入數(shù)組如果當(dāng)前數(shù)組的第已經(jīng)保存進了臨時數(shù)組,那么跳過,否則把當(dāng)前項到臨時數(shù)組里面利用判斷舊數(shù)組結(jié)果數(shù)組如果當(dāng)前數(shù)組的第項在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是,那么表示第項是重復(fù)的,忽略掉。 三種方法 利用indexOf判斷新數(shù)組 underscore.js中實際上也是使用的類似的indexOf //傳入數(shù)組 functio...
摘要:因為使用單獨的接口存取數(shù)據(jù)所以不用擔(dān)心與內(nèi)置屬性重名修改上面的方法后得到除了以外還有這種數(shù)據(jù)類型這是一個集合它不允許重復(fù)元素出現(xiàn)。 NaN NaN屬于number,也是一種基本數(shù)據(jù)類型,只要有一邊是 NaN,那么結(jié)果就是false 原始值和包裝對象 包裝對象即基本數(shù)據(jù)類型經(jīng)過包裝之后得到的對象,作為基本類型值的字符串擁有trim等方法,及l(fā)ength屬性,正是由于JS代碼會對原始值做一...
摘要:數(shù)組去重的方法第一種方法方法可以將結(jié)構(gòu)轉(zhuǎn)為數(shù)組這就是提供了一種數(shù)據(jù)去重的方法第二種方法運用擴展運算符提供了一種更便捷的去重方法第三種方法這是一種原生的去重方法,借助一個空數(shù)組來實現(xiàn)去重,便于理解底層原理函數(shù)帶有參數(shù)第四種方法同上函數(shù)不帶參 數(shù)組去重的方法 第一種方法 Array.from方法可以將Set結(jié)構(gòu)轉(zhuǎn)為數(shù)組 let items = new Set([1, 2, 3, 4, 5]...
閱讀 2663·2021-11-23 09:51
閱讀 1649·2021-11-22 13:54
閱讀 2789·2021-11-18 10:02
閱讀 943·2021-08-16 10:57
閱讀 3559·2021-08-03 14:03
閱讀 1879·2019-08-30 15:54
閱讀 3534·2019-08-23 14:39
閱讀 606·2019-08-23 14:26