封裝乙個方法,找出陣列中重複數大於n的元素集合

2021-09-11 11:45:08 字數 1504 閱讀 6353

例如 [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4],封裝乙個陣列原型上的方法,方法返回 重複數目大於2 的子元素集合,結果為[1, 2, 3]

初看並不難,迴圈一下就可以搞定

var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4]

var obj = {}

var result =

for(var i = 0; i

})console.log(result) // ['1', '2', '3']

複製**

不過得到的結果卻有些改變 ,因為結果中的值都為字串,原陣列中型別為數字。 其實稍加修改即可 result.push(item) 改為 result.push(+item) 這樣result結果符合要求了,即 [1, 2, 3]

有沒有別的寫法?是不是瞬間看起來高大上了一些呢?

var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4]

var result = arr.reduce((pre,cur)=>)

} else

return pre

},).filter(i => i.count > 2)

.map(i => i.value)

console.log(result)

複製**

思路解析 1因為物件屬性的key值會自動轉為字串型別,那麼如果能轉換為如下的型別,就避免了key值的轉換

[

, ,

, ]複製**

如果能轉換為這樣的資料結構,那再filter後map一下,就能得出我們需要的結果。 2 利用reduce轉換原本資料 reduce函式第一次執行 pre === cur === 1 index === -1 所以 pre === reduce函式第二次執行 pre === cur === 1 index === 0 所以 pre ===

依次執行,最終就能得到上面資料結構

對新得到的資料依次執行filter和map filter 對陣列 ** ,剔除不滿足條件的 map 對陣列每一項都進行乙個操作,返回新資料組成的陣列

那麼到這,這道題寫完了嗎? 答案是否定的,注意審題封裝乙個陣列原型上的方法,那麼需要對上面方法進行改造

array.prototype.myfun = function(n) )

} else

return pre

},).filter(i => i.count > 2)

.map(i => i.value)

return result

}var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4]

var rusult = arr.myfun(2) //[1, 2, 3]複製**

找出陣列中重複數字

題目 在乙個長度為n的陣列裡所有數字都在 0 n 1 的範圍內,找到陣列中的重複數字。思路 看到問題之後的直接想法是將輸入的陣列排序,排序後找到重複數字是一件很容易的事情。可是排序乙個長度為n的陣列需要 o nlogn 的時間。為了降低時間複雜度,考慮用雜湊表來解決。方案就是先建立乙個和陣列等長的雜...

乙個陣列中找重複數

乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。include const int no repeat flag 1 int findrepeatnumberinarray int a,int n return no re...

續找出陣列中的重複數字

續上篇找出陣列中的重複數字 方法二 利用合適的演算法進行計算。首先先想到這個規律,就是如果陣列是有序的並且元素不重複,那麼第i個位置的元素應該是i。如果第i個位置的元素不是i,就說明陣列中是存在重複數字的。利用下面的演算法 比較i和arr i 如果相等,說明i arr i 在正確的位置 如果不相等,...