JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享
方法1
利用 ES6的set 方法和解構(gòu)賦值——最常用、最簡(jiǎn)單。
這個(gè)方法是es6之后加入的,是最簡(jiǎn)單的一種方法。
Set是一種結(jié)構(gòu),是一種不重復(fù)值的集合,如:{1,2,3}。它的特性之一就是里面的每一個(gè)值都是不重復(fù)的;
[...new Set(arr)] 意思是將Set結(jié)構(gòu)解構(gòu)賦值為數(shù)組。
function Unrepeated1(arr) {
return [...new Set(arr)]
}
console.log(Unrepeated1([1,1,2,2,3,3]));
// 結(jié)果是[1, 2, 3]
方法2
利用數(shù)組原型對(duì)象上的 lastIndexOf 方法——以前常用,逐漸被include代替
思路: 定義一個(gè)空數(shù)組,遍歷這個(gè)原數(shù)組,如果空數(shù)組沒有這個(gè)數(shù)就往空數(shù)組里加入,有的話就不操作。
lastIndeOf():返回指定字符串值最后出現(xiàn)的位置,從后向前搜索,找不到返回-1
function Unrepeated2(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
}
return res;
}
console.log(Unrepeated2([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]
方法3
利用數(shù)組原型對(duì)象上的 splice 方法。
思路是:雙層遍歷數(shù)組,舉例:如果第一項(xiàng)是數(shù)字1,那么第二層遍歷從第二項(xiàng)開始,如果后面也找到1,就把1刪除。
splice():用于刪除數(shù)組元素,splice(j,1)j代表數(shù)組索引是j,1代表刪除1個(gè)
function Unrepeated3(arr) {
var 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;
}
console.log(Unrepeated3([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
方法4
利用數(shù)組原型對(duì)象上的 forEach 和 includes方法——includes很強(qiáng)大
思路:定義一個(gè)空數(shù)組,遍歷原數(shù)組,再遍歷空數(shù)組,如果空數(shù)組里面含有原數(shù)組的項(xiàng)就添加進(jìn)空數(shù)組,如果空數(shù)組已經(jīng)有了,就不再操作。
includes:表示是否含有,返回布爾值,說的也是它以后會(huì)替代indexof。是es6新增的很強(qiáng)大的一個(gè)api,不止數(shù)組可以用,對(duì)象,字符串都可以用。
function Unrepeated4(arr) {
let newArr = [];
arr.forEach(item => {
return newArr.includes(item) ? '' : newArr.push(item);
});
return newArr;
}
console.log(Unrepeated4([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 4, 5, 6, 7]
方法5
利用數(shù)組原型對(duì)象上的 filter 和 includes方法。
和方法4類似的思路,只不過foreach+includes換成了filter+includes
function Unrepeated5(arr) {
var newArr = []
newArr = arr.filter(function (item) {
return newArr.includes(item) ? '' : newArr.push(item)
})
return newArr
}
console.log(Unrepeated5([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]
方法6
利用數(shù)組原型對(duì)象上的includes方法。
這個(gè)方法可以作為一般性解法,代碼可以進(jìn)一步簡(jiǎn)化。
function Unrepeated6(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(Unrepeated6([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]
方法7
利用數(shù)組的indexOf下標(biāo)屬性來查詢。
思路和上面的類似
function Unrepeated7(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i])===-1) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(Unrepeated7([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]
方法8
利用對(duì)象屬性存在的特性,如果沒有該屬性則存入新數(shù)組。
這個(gè)方法兼容性比較好。思路是用一個(gè)空對(duì)象來標(biāo)記,通過遍歷,動(dòng)態(tài)的設(shè)置對(duì)象的屬性,以此來區(qū)分是否重復(fù)。
function Unrepeated8(arr) {
var obj={}
var newArr=[]
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = 1
newArr.push(arr[i])
}
}
return newArr
}
console.log(Unrepeated8([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]
方法9
思路:先將原數(shù)組排序,在與相鄰的進(jìn)行比較,如果不同則存入新數(shù)組。
function Unrepeated9(arr) {
var formArr = arr.sort()
var newArr=[formArr[0]]
for (let i = 1; i < formArr.length; i++) {
if (formArr[i]!==formArr[i-1]) {
newArr.push(formArr[i])
}
}
return newArr
}
console.log(Unrepeated9([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 4,5, 6, 7]
方法10
思路:定義一個(gè)新數(shù)組,并存放原數(shù)組的第一個(gè)元素,然后將元素組一一和新數(shù)組的元素對(duì)比,若不同則存放在新數(shù)組中。
function Unrepeated10(arr) {
let newArr = [arr[0]];
for (let i = 1; i < arr.length; i++) {
let repeat = false;
for (let j = 0; j < newArr.length; j++) {
if (arr[i] === newArr[j]) {
repeat = true;
break;
}else{
}
}
if (!repeat) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(Unrepeated10([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]));
// 結(jié)果是[1, 2, 3, 5, 6, 7, 4]到此這篇關(guān)于JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享的文章就介紹到這了,更多相關(guān)JavaScript數(shù)組去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js如何找出兩個(gè)數(shù)組中不同的元素
- JavaScript數(shù)組filter方法
- js深度合并兩個(gè)數(shù)組對(duì)象的實(shí)現(xiàn)
- JavaScript中數(shù)組隨機(jī)排序的實(shí)現(xiàn)詳解
- JavaScript數(shù)組合并的8種常見方法小結(jié)
- JavaScript高階API數(shù)組reduce函數(shù)使用示例
- JavaScript中運(yùn)算符與數(shù)組擴(kuò)展詳細(xì)講解
- JS數(shù)組操作大全對(duì)象數(shù)組根據(jù)某個(gè)相同的字段分組
- Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法
- js對(duì)象合并的4種方式與數(shù)組合并的4種方式
- 27個(gè)JavaScript數(shù)組常見方法匯總與實(shí)例說明
相關(guān)文章
JS 使用for循環(huán)遍歷子節(jié)點(diǎn)查找元素
這篇文章主要介紹了JS 使用for循環(huán)配合數(shù)組遍歷子節(jié)點(diǎn)查找元素,經(jīng)測(cè)試,效果不錯(cuò),需要的朋友可以看看2014-09-09
javascript實(shí)現(xiàn)日期按月份加減
JavaScript實(shí)現(xiàn)日期加減計(jì)算功能代碼實(shí)例,因?yàn)樵趈s中沒有類似C#中的AddDays方法,所以要想實(shí)現(xiàn)日期加減的話,就需要自己寫函數(shù)來實(shí)現(xiàn)。這里分享給大家,有需要的小伙伴可以參考下2015-05-05
JS實(shí)現(xiàn)時(shí)間格式化的方式匯總
這篇文章介紹了JS實(shí)現(xiàn)時(shí)間格式化的方式,有需要的朋友可以參考一下2013-10-10
JavaScript設(shè)計(jì)模式之代理模式詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript設(shè)計(jì)模式之代理模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
使用clipboard.js實(shí)現(xiàn)復(fù)制功能的示例代碼
本篇文章主要介紹了使用clipboard.js實(shí)現(xiàn)復(fù)制功能的示例代碼,詳細(xì)介紹了clipboard.js插件的使用,有興趣的可以了解一下2017-10-10
Javascript文本框腳本實(shí)現(xiàn)方法解析
這篇文章主要介紹了Javascript文本框腳本實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
如何通過JS實(shí)現(xiàn)日歷簡(jiǎn)單算法
這篇文章主要介紹了如何通過JS實(shí)現(xiàn)日歷簡(jiǎn)單算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

