JavaScript數組去重

數組去重,通常都是在面試的時候纔會碰到,通常是要求手寫數組去重方法的代碼。若是是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試官頗有可能對你另眼相看。
在真實的項目中碰到的數組去重,通常都是後臺去處理,不多讓前端處理數組去重。雖然平常項目用到的機率比較低,但仍是須要了解一下,以防面試的時候可能回被問到。前端

1、利用ES6中的set方法去重(ES中最經常使用)面試

var arr = [1,2,3,3,false,false,false,true,true,4,undefined,null,null,55,NaN];

function fun(arr){
  var num = Array.from(new Set(arr));
  console.log(num); //[1, 2, 3, false, true, 4, undefined, null, 55, NaN]
}			
fun(arr);

下面咱們介紹一下用到的方法:數組

第一個方法就是數組的from方法--Array.from();spa

數組的from方法能夠把一個類數組(僞數組)或者可遍歷(可循環)的對象轉化成一個真正的數組,例如code

var a = {
	0: 'a',
	1: '90',
	2: '88',
	3: ['mm', 'nn', 'hh'],
	'length': 4 // 不帶引號直接 length: 4 也是行的
}
var b = Array.from(a);
console.log(b) // ['a','90','88',['mm','nn','hh']]

假如咱們把a對象中的 'length': 4 代碼去掉會出現什麼狀況?或者把 'length': 4 中的4變成0呢?對象

var a = {
	0: 'a',
	1: '90',
	2: '88',
	3: ['mm', 'nn', 'hh']
}
var b = Array.from(a);
console.log(b) // []
var a = {
	0: 'a',
	1: '90',
	2: '88',
	3: ['mm', 'nn', 'hh'],
        'length': 0
}
var b = Array.from(a);
console.log(b) // []

沒想到這兩段代碼獲得的居然都是一個空數組!!!字符串

從這咱們就能夠看出要想把一個類數組轉化成一個真正的數組,該類數組就必需要具備length屬性,而且length屬性還得有指定得長度,若是沒有length屬性或length屬性得值爲0,那麼獲得得就是一個空數組。io

假如咱們把類數組對象的屬性名由數值型變成字符串型的數字會出現什麼樣的結果呢?console

var a = {
		  '0': 'a',
		  '1': '90',
		  '2': '88',
		  '3': ['mm', 'nn', 'hh'],
		  'length': 4
}
var b = Array.from(a);
console.log(b) //['a','90','88',['mm','nn','hh']]

這個例子告訴咱們其實類數組對象的屬性名爲字符串型的數字也是能夠的!!!!function

var a = { //第一種狀況
		'a': 'a',
		'b': '90',
		'c': '88',
		'd': ['mm', 'nn', 'hh'],
		'length': 0
}
var b = Array.from(a);
console.log(b) // []

var a = { //第二種狀況
		a: 'a',
		b: '90',
		c: '88',
		d: ['mm', 'nn', 'hh'],
		'length': 0
}
var b = Array.from(a);
console.log(b) // []

像上面這兩種狀況獲得的都是空數組!!!!!

因而可知,將一個類數組對象轉化爲一個真正的數組 ,必須具有如下條件:

(1)該類數組對象必須具有length屬性,用於指定數組的長度;若是沒有length屬性,那麼轉換後的數組就是一個空數組

(2)該類數組對象的屬性名必須爲數值型或字符串型的數字

注:該類數組對象的屬性名能夠加引號,也能夠不加引號

第二個方法就是set方法:這個方法的做用就是去重,這也是個集合的方法,咱們都知道集合它有個特色就是無重複性,因此用它來達到去重的目的。

相關文章
相關標籤/搜索