JS怎么判斷數組有多少個重復的?
第一種方法:建個數組,用戶輸入時檢查數組最后一個數是否和輸入相等,不相等就push進去。最后輸出數組的長度就好了。
第二種方法:不管用戶輸入是否有連續重復的數字,都push到一個數組里,最后把連續的數字剔除掉之后的長度就好了。這樣問題就變成了:實現一個函數,用戶輸入:[1,2,2,2,3,3,4,4,4,5,5],要求輸出為5(即[1,2,3,4,5]的長度)
。
上面的方法我是按照題目敘述理解的:“如果用戶連續猜測同一個數字則只算一次”。只剔除連續重復的數字,也就是說,用戶輸入1,2,3,3算是3次,輸入3,1,2,3就算4次了。不過看了其它回答好像你的理解是不連續也算重復?也就是輸入3,1,2,3也算3次。這樣的話把上面的方法稍微改一下也就好了。第一種方法:輸入時判斷輸入是否已經存在。如果你用的數組就用indexOf判斷,普通對象就判斷相應屬性是否undefine。第二種方法:把:改成就好了。
js堆和棧的區別?
js堆和棧主要區別兩方面:
1、操作不同
棧由操作系統自動分配和釋放,用于存放簡單的數據段,占據固定大小的空間。
堆是自主分配和釋放,若不主動釋放,程序結束時由第三方回收。
2、數據結構不同
Javascript通過數組的,模仿實現堆棧。
棧:棧是一種運算受限的線性表,把新元素放到棧頂元素的上面,使之成為新的棧頂元素稱作進棧、入棧。
堆:堆是優先隊列,也就是說隊列中存在執行時會根據優先級找優先度最高的先執行。
如何在Javascript中更好地使用數組?
javascript中會改變原數組的方法
1.push()方法在數組的尾部添加一個或多個元素,并返回數組的長度
2.pop()方法刪除數組的最后一個元素,減小數組長度并返回它刪除的值。
參數:無
//組合使用push()和pop()能夠用Javascript數組實現先進后出的棧
3.unshift()方法在數組的頭部添加一個或多個元素,并將已存在的元素移動到更高索引的位置來獲得足夠的空間,最后返回數組新的長度。
參數:item1,item2,...,itemX,要添加到數組開頭的元素
4.shift()方法刪除數組的第一個元素并將其返回,然后把所有隨后的元素下移一個位置來填補數組頭部的空缺,返回值是刪除的元素
參數:無。
5.splice()方法是在數組中插入或刪除元素的通用方法
語法array.splice(start[,deleteCount[,item1[,item2[,...]]]])
參數:
start
指定修改的開始位置(從0計數)。如果超出了數組的長度,則從數組末尾開始添加內容;如果是負值,則表示從數組末位開始的第幾位(從-1計數);若只使用start參數而不使用deleteCount、item,如:array.splice(start),表示刪除[start,end]的元素。
deleteCount(可選)
整數,表示要移除的數組元素的個數。如果deleteCount是0,則不移除元素。這種情況下,至少應添加一個新元素。如果deleteCount大于start之后的元素的總數,則從start后面的元素都將被刪除(含第start位)。如果deleteCount被省略,則其相當于(arr.length-start)。
item1,item2,...(可選)
要添加進數組的元素,從start位置開始。如果不指定,則splice()將只刪除數組元素。
返回值:由被刪除的元素組成的一個數組。如果只刪除了一個元素,則返回只包含一個元素的數組。如果沒有刪除元素,則返回空數組。
//start不超過數組長度(以下操作是連續的)
6.sort()方法將數組中的元素排序并返回排序后的數組
參數:
compareFunction(可選)用來指定按某種順序進行排列的函數。如果省略,元素按照轉換為的字符串的各個字符的Unicode位點進行排序。如果指明了compareFunction,那么數組會按照調用該函數的返回值排序。即a和b是兩個將要被比較的元素:
*如果compareFunction(a,b)小于0,那么a會被排列到b之前;
*如果compareFunction(a,b)等于0,a和b的相對位置不變。備注:ECMAscript標準并不保證這一行為,而且也不是所有瀏覽器都會遵守(例如Mozilla在2003年之前的版本);
*如果compareFunction(a,b)大于0,b會被排列到a之前。
*compareFunction(a,b)必須總是對相同的輸入返回相同的比較結果,否則排序的結果將是不確定的。
返回值:返回排序后的數組。原數組已經被排序后的數組代替。
7.reverse()方法將數組中的元素顛倒順序,返回逆序的數組。
參數:無
letarr[1,2,3]
()//arr是[3,2,1],返回值是[3,2,1]
返回值:返回順序顛倒后的數組。原數組已經被排序后的數組代替。
8.copyWithin()方法淺復制數組的一部分到同一數組中的另一個位置,并返回它,而不修改其大小。(ES6新增)
語法:(target[,start[,end]])
參數:
target
0為基底的索引,復制序列到該位置。如果是負數,target將從末尾開始計算。
如果target大于等于arr.length,將會不發生拷貝。如果target在start之后,復制的序列將被修改以符合arr.length。
start
0為基底的索引,開始復制元素的起始位置。如果是負數,start將從末尾開始計算。
如果start被忽略,copyWithin將會從0開始復制。
end
0為基底的索引,開始復制元素的結束位置。copyWithin將會拷貝到該位置,但不包括end這個位置的元素。如果是負數,end將從末尾開始計算。
如果end被忽略,copyWithin將會復制到arr.length。
返回值:改變了的數組。
//copyWithin函數是設計為通用的,其不要求其this值必須是一個數組對象。
[]({length:5,3:1},0,3)
//{0:1,3:1,length:5}
9.fill()方法用一個固定值填充一個數組中從起始索引到終止索引內的全部元素。(ES6新增)
語法:(value[,start[,end]])
參數:
value用來填充數組元素的值。
start(可選)起始索引,默認值為0。
end(可選)終止索引,默認值為this.length。
如果start是個負數,則開始索引會被自動計算成為lengthstart,其中length是this對象的length屬性值.如果end是個負數,則結束索引會被自動計算成為lengthend。
返回值:修改后的數組