摘要:最簡單粗暴地方式,兩重循環兩個因為兩個因為排序,如果相同就會挨著先放數組第一個元素無法判斷對象對象數組去重方法補充我想說一下與相同點他們都是用來遍歷數組的。不同點能有返回值,沒有返回值。
這一篇文章,我們講解一下數組去重。
1.最簡單粗暴地方式,兩重for循環
let arr = [9, 5, 6, 5, "1", "1", true, 5, true]; for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if(arr[i] === arr[j]){ arr.splice(j,1); } } } console.log(arr); // [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}] // 兩個NaN, 因為NaN!=NaN
2.indexOf
let a = []; for (var i = 0; i < arr.length; i++) { if(a.indexOf(arr[i]) === -1){ a.push(arr[i]); } } console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}] // 兩個NaN, 因為NaN!=NaN
3.includes
for (var i = 0; i < arr.length; i++) { if(!a.includes(arr[i])){ a.push(arr[i]); } } console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, {…}, {…}]
4.Set
let a = [...(new Set(arr))]; console.log(a); // [9, 5, 6, "1", true, undefined, null, NaN, {…}, {…}]
5.filter
let a = arr.filter(function(value, index){ return arr.indexOf(value, 0) === index; }) console.log(a);// [9, 5, 6, "1", true, undefined, null, {…}, {…}] arr.filter(function(value){ return a.indexOf(value) === -1 ? a.push(value) : a; }) console.log(a);// [9, 5, 6, "1", true, undefined, null, NaN, NaN, {…}, {…}]
6.sort
arr = arr.sort(); // 排序,如果相同就會挨著 a.push(arr[0]); // 先放數組第一個元素 for (var i = 1; i < arr.length; i++) { if(arr[i] !== arr[i - 1]){ a.push(arr[i]); } }
7.reduce
arr = arr.sort(); arr.reduce(function(preVal, nowVal){ if(preVal !== nowVal){ a.push(preVal); } return nowVal; }, a) arr.reduce(function(preVal, nowVal){ return a.indexOf(nowVal) === -1 ? a.push(nowVal) : a; }, a) console.log(a); //["1", 5, 6, 9, NaN, NaN, {…}, {…}, null, true, undefined]
8.hasOwnProperty
let obj = {}; for (var i = 0; i < arr.length; i++) { if(!obj.hasOwnProperty(obj[typeof arr[i] + arr[i]])){ obj[typeof arr[i] + arr[i]] = arr[i]; } } console.log(Object.values(obj)); //[9, 5, 6, "1", true, undefined, null, NaN, {…}] 無法判斷對象
9.對象數組去重方法
let obj = {}; for (var i = 0; i < arr.length; i++) { if(!obj[typeof arr[i] + arr[i]]){ obj[typeof arr[i] + arr[i]] = arr[i]; } } console.log(Object.values(obj)); //[9, 5, 6, "1", true, undefined, null, NaN, {…}]
10.Map
let map = new Map(); for (var i = 0; i < arr.length; i++) { if(!map.get(arr[i])){ map.set(arr[i], arr[i]); } } console.log(map);
補充
我想說一下forEach與map
arr.forEach( function(element, index) { console.log(element); }); arr.map(function(element, index){ console.log(element); });
相同點
他們都是用來遍歷數組的。
不同點
map能有返回值,forEach沒有返回值。
let arr = [9,3,6,3,6,3]; arr = arr.forEach( function(element, index) { return element + 1; }); console.log(arr); // undefined arr = arr.map(function(element, index){ return element + 1; }); console.log(arr); //[10, 4, 7, 4, 7, 4]
forEach不能中途打斷
let arr = [9,3,6,3,6,3]; arr.forEach( function(element, index) { console.log(element); if(index === 2){ return; //沒用,break,continue會報錯是無效的 } });
forEach模擬實現
Array.prototype.bforEach = function (fn) { let array = this; for (var i = 0; i < array.length; i++) { fn(array[i], i, array); } } arr.bforEach(function(element, index){ console.log(element); // 9, 3, 6, 3, 6, 3 });
map模擬實現
Array.prototype.Map = function (fn) { let array = this, a = [], r; for (var i = 0; i < array.length; i++) { r = fn(array[i], i, array); a.push(r); } return a; }
喜歡的可以點一個贊,或者關注一下。鼓勵一下一名自學前端的大學生。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100700.html
摘要:數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...
摘要:本文最早發布于,為原創常規方法兩種數組深拷貝,為不了影響原來的數組第一種方法常用但是有坑碰到這種情況就出問題了第二種方法使用,方法返回的結果并不一定是升序,主要目的是將重復的數字排到一起使用的方法兩種簡潔優雅版奇技淫巧更新看到評論 本文最早發布于csdn,為原創 常規方法兩種 let json = arr => { let res = [], obj = {};...
摘要:對象克隆我們經常會用到一個對象去做一些事情,可能有時候我們不想改變原有的數據。如果是對象接著遞歸復制判斷是對象還是數組其實這還不是最終的深克隆,因為這一個也有它自己的問題,但是面對一般的情況應該沒問題,跟高級的用法請自行學習。 類型判斷 我們先說一下JS的數據類型,我們一般說JS有六大數據類型(ES6以前)分別是: 基本數據類型 Number String Boolean nul...
摘要:三種方法利用判斷新數組中實際上也是使用的類似的傳入數組如果當前數組的第已經保存進了臨時數組,那么跳過,否則把當前項到臨時數組里面利用判斷舊數組結果數組如果當前數組的第項在當前數組中第一次出現的位置不是,那么表示第項是重復的,忽略掉。 三種方法 利用indexOf判斷新數組 underscore.js中實際上也是使用的類似的indexOf //傳入數組 functio...
摘要:支持轉換為類型的,僅有,其他類型均不支持。如果中含有正負號數字和小數點以外的字符,則不支持轉換。轉換時,會自動添加虛數部分并以表示。轉換會直接完全轉換。轉換列表,會取每個字節的十進制值并組合成列表轉換為比較簡單。 int 支持轉換為 int 類型的,僅有 float、str、bytes,其他類型均不支持。 float -> int 會去掉小數點及后面的數值,僅保留整數部分。 int(-...
閱讀 1259·2021-09-22 15:18
閱讀 2589·2021-09-22 15:17
閱讀 2218·2019-08-30 15:55
閱讀 1567·2019-08-30 15:54
閱讀 1032·2019-08-30 13:12
閱讀 619·2019-08-30 13:12
閱讀 1673·2019-08-29 11:33
閱讀 1433·2019-08-26 17:04