原生JS數組去重的幾種方法

有時候我們做項目的時候往往會需要把數組里面一些重復的項去掉,但是原生JS有排序,有篩選等等,但是就是沒有數組去重怎么辦呢?
這能怎么辦,自己手動實現嘛。(以下代碼直接在原型上添加的的方法,為的就是和原生JS方法類似)可以達到Array.xxx()這樣的效果

第一種方法:創建空數組利用indexOf方法檢測就數組的項是否在新數組中。

Array.prototype.unique=function(){
  var arr=[];//創建新數組
  for(var i=0;i<this.length;i++){ //遍歷當前數組
  if(arr.indexOf(this[i])===-1){//如果等于-1,那么也是就是新數組中沒有一項和當前數組一樣arr.push(this[i])}
}
 return arr;
}
//調用:ary.unique()

?

第二種方法:創建空數組和空對象,判斷數組是否在對象中

Array.prototype.unique=function(){
var tmp={},arr=[]
for(var i=0;i&lt;this.length;i++){
if(!tmp[this[i]]){//如果tmp中沒有this[i]
tmp[this[i]]=true;//存入
arr.push(this[i]);//添加到新數組中
}
}
return arr
}
//調用:ary.unique()

第三種方法:下標判斷法

Array.prototype.unique=function(){
var arr=[this[0]];
for(var i=1;i<this.length;i++){ //遍歷當前數組,從第二項開始遍歷
if(this.indexOf(this[i])===i){//如果當前數組的第i項是i那么就存入新的數組
arr.push(this[i])
}
}
return arr;
}
//調用:ary.unique()

第四種方法:排序后在去重

Array.prototype.unique=function(){
var arr=[];
this.sort()
for(var i=0;i<this.length;i++){
if(this[i]!==arr[arr.length-1]){
arr.push(this[i])
}
}
return arr;
}
//調用:ary.unique()

第五種方法:黑科技new Set數組去重


首先我們先介紹下new Set

new Set是來自于ES6,Set對象是值的集合,你可以按照插入的順序迭代它的元素。 Set中的元素只會出現一次,即 Set 中的元素是唯一的。

大家可以去看下MDN文檔鏈接地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set

下面給出代碼!

[...new Set([1,1,2,2,3,3])];//[1,2,3]

代碼就這一句,利用的是Set中的元素是唯一的,只會出現一次的特性,這里還有一個概念:“...”

…(擴展運算符)

擴展運算符:將一個數組轉為用逗號分隔的參數序列

這樣以來就很清楚了,黑科技是不是很神奇,其實這也是大廠的一道面試題,說的是請用最少的代碼實現數組去重

新人如有錯誤,往指正,以免誤導別人~拜謝!

轉載于:https://www.cnblogs.com/fakin/p/7484617.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單例設計模式-枚舉

枚舉 枚舉應用實例 代碼演示 package com.atguigu.principle.singleton.type08;/** */ public class SingletonTest08 {public static void main(String[] args) {Singleton instance Singleton.INSTANCE;Singleton instance2 Singleton.INSTANCE;System.out.println(inst…

拋物線交點式公式_拋物線交點式

以下是范文網www zhuodaoren com 分享的6 已知拋物線與軸兩交點在軸同側&#xff0c;它們的距離的平方等于&#xff0c;則的值為( )&#xff0c;希望能幫助到大家!(一)6 已知拋物線與軸兩交點在軸同側&#xff0c;它們的距離的平方等于&#xff0c;則的值為( )函數與一元二次方…

學習的動力

要有自學的意識&#xff0c;這是一個知識不斷更新、不斷涌現的時代&#xff0c;大學里的很多知識是過時的&#xff0c;就算入校時是熱門行業的但很可能四年后畢業找工作時已經變成了夕陽產業&#xff0c;學習是一種能力&#xff0c;但首先是一種態度&#xff0c;一個人想在快速…

java面向對象之父類的引用指向子類的對象

1 package Text; 2 3 public class Job { 4 public void dowork(){ 5 6 } 7 } 1 package Text; 2 3 public class Luosidao extends Job{ 4 public void dowork(){ 5 System.out.println("螺絲刀擰螺絲。。。"); 6 } 7 } 1 packa…

單例模式在JDK應用的源碼分析

單例模式在JDK應用的源碼分析 單例模式在jdk中的源碼分析 在我們JDK中,java.lang.Runtime就是經典的單例模式(惡漢式) 代碼分析Debug源碼代碼說明 public class Runtime {private static Runtime currentRuntime new Runtime();/*** Returns the runtime object associate…

lisp語言cond和if套用_LISP - 決策

決策結構需要程序員指定一個或多個條件由程序進行評估或測試&#xff0c;以及要執行的語句或語句如果條件被確定為true&#xff0c;如果條件被確定為false那么選擇要執行其他語句。下面是在大多數編程語言中一個典型的決策結構的一般形式為&#xff1a;LISP提供了以下類型的決策…

H264基本概念之 宏塊、片和片組

這幾個概念對比音頻信號處理可是全新的&#xff0c;下面簡要介紹一下定義和作用&#xff1a; 1、宏塊&#xff08;Macro Block&#xff09;&#xff1a;一個編碼圖像首先要劃分成多個塊&#xff08;4x4 像素&#xff09;才能進行處理&#xff0c;顯然宏塊應該是整數個塊組成&…

CodeVS 1044 攔截導彈(DP)

題目大意&#xff1a; http://codevs.cn/problem/1044/ 第一問題就是求序列的最長遞減數列的長度&#xff0c;第二問就是求數列的最長遞增序列的長度。 代碼&#xff1a; #include <iostream>using namespace std;int arr[30] {0}; int dp[30] {0}; int mp[30] {0};in…

鏈表(Linked List)之單鏈表

原文地址:傳送門 鏈表(Linked List)介紹 鏈表是有序的列表&#xff0c;但是它在內存中是存儲如下 小結: 鏈表是以節點的方式來存儲,是鏈式存儲 每個節點包含 data 域&#xff0c; next 域&#xff1a;指向下一個節點. 如圖&#xff1a;發現鏈表的各個節點不一定是連續存儲…

有字符csv文件導入matlab_Matlab:如何讀取CSV文件以及如何讀取帶有字符串數據項的CSV文件...

CSV&#xff0c;逗號分開的文件&#xff0c;如果能快速的讀取這些文件中的數據&#xff0c;無疑會幫助我們解決很多問題。1、 只有數據的CSV文件&#xff0c;CSV file that includes only numbers.As an example, create a text file, named as data.csv if you prefer, which …

xchg_mb_border()

顧名思義&#xff0c; xchg_mb_border() 交換 MB 邊界的像素。閱讀代碼可知&#xff0c;交換雙方為邊界緩存 (left_border,top_borders) 與重建圖象中的相應數據。其中 xchg 參數是否為 1 決定&#xff0c;在從邊界緩存賦值到重建圖象的同時&#xff0c;是否保存重建圖象的數據…

Introduction to the Optimizer --cbo

http://docs.oracle.com/cd/B10500_01/server.920/a96533/optimops.htm

統計字符串中某個字出現的次數

package ch11;import java.util.Scanner;/** * Created by liwenj on 2017/7/21. */public class T6 { public static void main(String[] args) { String w "我愛你中國&#xff0c;我愛你故鄉"; String a "愛"; int k0; …

jedispool redis哨兵_通過java哨兵JedisSentinelPool代碼示例連接對配置的redis哨兵主從模式進行測試驗證...

一、前言本文章通過關于java的jedis(2.6.0)的redis客戶端連接驅動包&#xff0c;對配置的redis哨兵主從讀寫模式配置進行示例代碼驗證&#xff0c;詳細參見具體配置步驟&示例代碼說明部分。二、配置步驟1. 安裝redis(參考其他文章教程),并配置主從模式(參考其他相關文章&am…

鏈表(Linked List)之雙向鏈表

雙向鏈表應用實例 使用帶head頭的雙向鏈表實現 –水滸英雄排行榜 管理單向鏈表的缺點分析: 單向鏈表&#xff0c;查找的方向只能是一個方向&#xff0c;而雙向鏈表可以向前或者向后查找。 單向鏈表不能自我刪除&#xff0c;需要靠輔助節點 &#xff0c;而雙向鏈表&#xff…

H264 解碼耗時分析

在數字基帶處理器上代碼的最佳放置 美國模擬器件公司 Jose Fridman   在手機等嵌入式系統中&#xff0c;除了處理器執行時間外&#xff0c;最重要的資源就是設備總線和存儲器接口。本文將介紹一種在使用指令高速緩存時其帶寬消耗的基礎上&#xff0c;統計分析高速緩存所采用…

CentOS 7 使用iptables防火墻

# 停止firewalld服務 systemctl stop firewalld systemctl mask firewalld # 安裝iptables-services yum install iptables-services Enable the service at boot-time: # 啟動iptables服務 systemctl enable iptables # 管理iptables systemctl [stop|start|restart] ip…

Linux命令之useradd和userdel(添加、刪除用戶)

一、【useradd】&#xff1a;添加用戶命令 1.作用useradd或adduser命令用來建立用戶帳號和創建用戶的起始目錄&#xff0c;使用權限是超級用戶。 2.格式 useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name 3.主…

鏈表(Linked List)之環形鏈表

原文地址:傳送門 單向環形鏈表應用場景 Josephu(約瑟夫、約瑟夫環) 問題 Josephu 問題為&#xff1a;設編號為1&#xff0c;2&#xff0c;… n的n個人圍坐一圈&#xff0c;約定編號為k&#xff08;1<k<n&#xff09;的人從1開始報數&#xff0c;數到m 的那個人出列&…

springboot 單測加入參數_spring-boot-單元測試參數數

簡單案例RunWith(Parameterized.class)public class ParameterTest {// 2.聲明變量存放預期值和測試數據private String firstName;private String lastName;//3.聲明一個返回值 為Collection的公共靜態方法&#xff0c;并使用Parameters進行修飾Parameterized.Parameterspubli…