首先,讓我們加入intArray
作爲參數,並宣佈循環迭代局部變量var x
解決您的removedDupes
功能:
function removeDupes(intArray) {
var out = [],
obj = {};
for (var x = 0; x < intArray.length; x++) {
obj[intArray[x]] = 1;
}
for (var x in obj) {
out.push(x);
}
return out;
}
第一循環遍歷所有intArray
元素。對於每個元素,它在obj
上創建一個新屬性,密鑰爲intArray[x]
,值爲1
,通過obj[intArray[x]] = 1
。這被稱爲。現在,對象不能有重複的鍵。因此,兩次添加相同的屬性鍵實際上會覆蓋之前添加的屬性。因此,當循環完成時,您的obj
每個唯一數組元素只有一個鍵。
第二個循環然後將這些鍵推入結果out
陣列。
您的removeDupes
函數存在一些問題。首先,即使輸入是一個number
元素的數組,它也會返回一個string
元素的數組。這是因爲obj
鍵不能是數字,並且總是轉換爲字符串。您可以通過存儲與鑰匙一起的數值如下修正:
function removeDupes(intArray) {
var out = [],
obj = {};
for (var x = 0; x < intArray.length; x++) {
obj[intArray[x]] = intArray[x];
}
for (var x in obj) {
out.push(obj[x]);
}
return out;
}
現在,這個工作,但它是非常冗長。通過用return Object.values(obj);
替換第二個循環,可以縮短它。甚至更短,通過使用一個Set
:
function removeDupes(intArray) {
return [...new Set(intArray)];
}
沒有給一個漫長的囉嗦答案。看看這個網站,可能會幫助你更好地理解JS。它爲我做.. https://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Tony
你是什麼意思的「作品」?預期的結果是什麼?爲什麼它不工作?數組也只是具有鍵值對的對象。你使用數組作爲數字指標。 – Xufox
https://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets – baao