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