日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

数组去重(JavaScript)先从网上整理一波,待验证

發布時間:2023/12/31 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组去重(JavaScript)先从网上整理一波,待验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組去重(JavaScript)

前端面試題:給定一個數組[1,3,2,4,5,3,22,21,2],去重。
方法很多

  • for循環遍歷
    • 雙層for循環,存儲到新的數組
    • 雙層for循環,不聲明新的數組,在原數組使用splice方法
  • 利用對象的屬性唯一(有問題)
  • 先排序,然后將第n+1個與第n個比較去重
  • ES6語法,set()
  • 使用遞歸
  • 神操作
  • 一些輪子
  • 其他,比如包含了字符串,或者數組很大

for循環遍歷

Array.prototype.distinct = function(){var arr = this,result = [],i,j,len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] === arr[j]){j = ++i;}}result.push(arr[i]);}return result; } var arra = [1,2,3,4,4,1,1,2,1,1,1]; arra.distinct(); //返回[3,4,2,1] Array.prototype.distinct = function (){var arr = this,i,j,len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] == arr[j]){arr.splice(j,1);len--;j--;}}}return arr; }; var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,]; var b = a.distinct(); console.log(b.toString()); //1,2,3,4,5,6,56

地址

利用對象的屬性唯一(有問題)

function unique(arr){var res =[];var json = {};for(var i=0;i<arr.length;i++){if(!json[arr[i]]){res.push(arr[i]);json[arr[i]] = 1;}}return res;}

地址

先排序,然后將第n+1個與第n個比較去重

function unique(arr){var arr2 = arr.sort();var res = [arr2[0]];for(var i=1;i<arr2.length;i++){if(arr2[i] !== res[res.length-1]){res.push(arr2[i]);}}return res;}

地址

ES6語法,set()

貼一個來自尤雨溪的,網址

// ES6 function unique (arr) {const seen = new Map()return arr.filter((a) => !seen.has(a) && seen.set(a, 1)) } // or function unique (arr) {return Array.from(new Set(arr)) }作者:尤雨溪 鏈接:https://www.zhihu.com/question/29558082/answer/44854426 來源:知乎 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

另一個簡潔的

// ES6:一行關鍵代碼 const uniqueItems = arr => [...new Set(arr)];// 測試 let arr = [4, 5, 4, 6, 3, 4, 5, 2, 23, 1, 4, 4, 4, 1, 2, 3, 45]; const uniqueItems = arr => [...new Set(arr)]; uniqueItems(arr);作者:莊引 鏈接:https://www.zhihu.com/question/29558082/answer/240560893 來源:知乎 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 function uniteUnique() {const list=[].concat(...arguments);return list.reduce((oldlist,nowitem)=>oldlist.includes(nowitem)?oldlist:[...oldlist,nowitem],[]); }作者:知乎用戶 鏈接:https://www.zhihu.com/question/29558082/answer/237161293 來源:知乎 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

神操作

  • 如果使用underscore 或者 lodash的話應該可以使用_.uniq
  • ES6的實現,網址
  • // 去除相鄰相同的元素 let nub1By = fn => ([x,y,...xs]) => y === undefined ? (x===undefined?[]:[x]): fn(x,y) ? nub1By(fn)([y,...xs]): [x,...nub1By(fn)([y,...xs])]nub1By((a,b)=>a==b)([1,2,2,1,9,9,0])// 數組去重——去除前面 let uniqBy = fn => ([x,...xs]) => x === undefined ? []: xs.filter(a=>fn(a,x)).length !== 0 ? uniqBy(fn)(xs): [x,...uniqBy(fn)(xs)]uniqBy((a,b)=>a==b)([1,2,2,1,9,9,0])// 數組去重——去除后面 let uniq1By = fn => arr => uniqBy(fn)(arr.reverse()).reverse()uniq1By((a,b)=>a==b)([1,2,2,1,9,9,0])

    一些輪子

    jQuery: $.unique
    underscore: _.unique

    總結

    以上是生活随笔為你收集整理的数组去重(JavaScript)先从网上整理一波,待验证的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。