關於陣列去重問題引發的一系列思考

2021-07-29 22:57:35 字數 1843 閱讀 3890

其實取這個名字可能不太符合實際,畢竟沒有「一系列」╮(╯_╰)╭

問題引發是牛客網上js的陣列去重程式設計題,

先放乙個正確版本的**:

array.prototype.uniq = function

(),第一次出現的值

if(arr[i] != arr[i])

}else

}

}return newarr;

}

嘛,本來事情到這裡ac通過了就沒有之後的下文了,不過因為某些原因,我去嘗試另外一種方法:

array.prototype.uniq = function

(); for(var i = 0;i < arr.length; i++)

if(obj.hasownproperty(arr[i]))

obj[arr[i]] = arr[i];

newarr.push(arr[i]);

}return newarr;

}

遺憾的是,這段**沒有ac通過,當時怎麼想都沒想出來,網上也求助了很多人,明白了一些漏考慮的例子:

比如說引用相同的物件

(有點忘了)…

但是把這些加上去還是只通過50%。。。。

然後,重點來了!

[1,'1',null,undefined,nan,false,true,{},,function

(){},'nan','false'].uniq();

的結果正確的應該是

[1,'1',null,undefined,nan,false,true,{},,function

(){},'nan','false'],

而我的是

[1,'1',null,undefined,nan,false,true,{},,function

(){}]

******************************====

這個的原因應該是

物件設定屬性的時候會將屬性名轉成字串

var arr = [1,'1',null,undefined,nan,false,true,{},,function

(){}];

arr.foreach(function

(item,index));

//結果object

由此,聯想是不是它自動使用tostring()轉化,又測試:

arr.foreach(function

(item,index)

)//結果 報錯vm554:

1 uncaught typeerror: cannot read

property

'tostring'

of null(…)

結果報錯了,undefined,null,沒有tostring()方法,又想是不是用了valueof (),仍舊報錯。。。。o(╯□╰)o

***************==

後來找了度娘檢視tostring()的情況。。。揭秘:

其實這裡應該是用了強制型別轉化,string()
w3c上面有解釋:

關於強制型別轉化,w3c上有簡要的解釋:

well , that』s all……

DROP TRUNCATE分割槽引發的一系列問題

生產的分片資料庫innodb buffer pool reads偏高 某個開發dba指出buffer pool記憶體裡的資料和實際占用磁碟空間應是一致的,也就是varchar n 欄位在buffer pool中也僅占用n個位元組 drop和truncate分割槽期間,查詢掛起在opening tab...

mac安裝numpy引發的一系列問題

在安裝numpy和matplotlib過程中,直接提示 numpy requires system python 2.7 to install 但是mac電腦自帶的python本身是2.7,在stackoverflow上找到一篇文章 mac安裝matplotlib的步驟 然後寫了下面這段簡單的 測試...

關於一系列的f函式

fopen 函式的使用 fopen 檔名 選擇方式 選擇方式有常見的兩種 r 關於r,開啟乙個已存在的文字檔案,只能從中讀取資料 w 關於w,開啟或新建乙個文字檔案,只能寫入資料,若檔案已存在則覆蓋原全部內容 廢話不多說,直接上 讀取乙個建立過的文件內容 include int main print...