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。
返回值:修改后的数组