• 关于

    javascript数组方法

    的搜索结果

问题

如何检查数组是否在JavaScript中包含值?

保持可爱mmm 2020-01-08 11:23:34 0 浏览量 回答数 1

问题

Razor MVC使用模型数组填充Javascript数组

保持可爱mmm 2020-02-08 12:39:25 1 浏览量 回答数 1

问题

如何从JavaScript中的数组中删除特定元素?

保持可爱mmm 2020-01-08 11:12:12 1 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

问题

如何在不创建新数组的情况下用另一个数组扩展现有的JavaScript数组

保持可爱mmm 2020-01-13 17:31:12 1 浏览量 回答数 1

回答

既然是用 javascript 来做对比,建议用简单一些的方法来进行判断一个数组是否为递增数组。将该数组进行 sort 递增排序并通过 join 方法将其转为字符串,再与前面的数组转字符串后进行对比,如果一样,则为递增数组。

icebergyao 2019-12-02 01:25:06 0 浏览量 回答数 0

问题

如何在特定索引(JavaScript)的数组中插入项目?

保持可爱mmm 2020-01-08 15:28:34 1 浏览量 回答数 1

问题

读取数组的`length`属性真的在JavaScript中花费那么昂贵吗?

保持可爱mmm 2020-02-09 12:10:30 0 浏览量 回答数 1

问题

JavaScript中将数组拼接为数组的更好方法

保持可爱mmm 2020-02-09 13:02:41 0 浏览量 回答数 1

问题

连接N个数组的最有效方法是什么?

保持可爱mmm 2020-01-16 15:41:30 0 浏览量 回答数 1

问题

从Javascript数组中删除空元素

保持可爱mmm 2020-01-13 16:32:14 3 浏览量 回答数 1

问题

如何在Javascript数组的开头添加新的数组元素?

保持可爱mmm 2020-01-08 16:25:51 1 浏览量 回答数 1

问题

JavaScript中数组的最大大小

保持可爱mmm 2020-02-08 11:13:54 0 浏览量 回答数 1

问题

与push()相反

保持可爱mmm 2020-02-06 22:51:32 0 浏览量 回答数 1

问题

比较对象的JavaScript数组以获取最小/最大

保持可爱mmm 2020-02-08 14:21:26 0 浏览量 回答数 1

问题

如何构建一个伪数组?

杨冬芳 2019-12-01 19:50:26 890 浏览量 回答数 1

回答

1.让JavaScript暂停下来,慢下来。 JavaScript排序是很快的,要我们肉眼能看到它的实现过程,我首先想到的是让排序慢下来。 排序的每一个循环都让它停300ms然后再继续进行。 怎么样才能停下来呢。查了一下JavaScript貌似没有sleep()这样的函数。暂停做不到,但是可以想办法让实现跟暂停差不多的效果。比如在循环里做一些无关的事情 。 首先尝试了让while(true)来一直执行一个空操作。执行一段时间再回到排序逻辑。代码大致是这样: for (var i = 0; i < 3; i++) { document.writeln(i); //DOM操作 var now = new Date().getTime(); while(new Date().getTime() - now < 3000){} } 慢是慢下来了。不过太耗资源,排序进行过程中dom并不会有任何改变,直到排序结束, DOM会变成排序好之后的样子。 但是如果设置断点一步步执行的时候 又可以看到一步步的排序变化。估计是因为这个操作太耗资源导致浏览器下达了一个DOM操作的命令但是一直腾不出资源来进行DOM操作。所以真正DOM操作的时候在js代码执行结束之后。 所以让JavaScript排序慢来来还是没有实现。 另一种让JavaScript暂停下来的思路: 写这个文章的时候又想到一种方法来让JavaScript停下来。 那就是AJAX的同步请求,以及超时操作。 也就是在要停下来的地方放一个AJAX请求,同步请求, 然后设置超时。超时的时间就是我们要暂停的时间。为了避免在到达超时请求之前服务 器就返回了我们的AJAX请求。可以在服务端运行类似 sleep()的程序 。从而保证AJAX不会返回。直接超时然后返回到我们的循环。不过这只是个设想。有兴趣的可以去尝试一下。 2.闭包和定时器。 这种思路不需要让排序过程慢下来。而是使用闭包缓存排序过程中数组的变化。然后使用setTimeout来确定展示每一个数组状态的顺序。在排序循环中放入类似下面的代码。 (function(){ var theArr = arr.slice();//当前数组状态的备份 setTimeout(function(){ bubbleSortDom(theArr);//排序的DOM操作。 },500*timeCount); timeCount++;//定时器的顺序。 })(); 不过后来发现这样子写的话代码量会比较大,逻辑有修改的话要修改的地方会有点多。局限性很多,比如要实现排序动画加快或减慢操作几乎是很困难的。所以还要另想办法。 3.缓存排序中的数组状态。 也就是在排序过程中。将数组的每一轮循环的状态保存到一个数组。然后再用这个数组依次将排序状态保存下来。 只需要在排序中加入一句就行。 this.pushHis(arr.slice(),i-1,j,k,temp); 这样就只需要一个setInterval()就可以了。并且可以很方便的实现动画的加快与减慢。逻辑也比较好理解 。 问题二:如何实现JavaScript排序动画的加快与减慢。 我们问题一使用的第三种方法。 得到一个保存了每一步排序状态的数组arr。 然后我们可以使用一个setInterval()定时器一步步展现排序状态。 如果要加快速度或减慢速度。就clearInterval(),修改定时器的执行间隔,重新setInterval(),从前一个定时器执行到数组中的位置开始执行。 问题三:对于使用递归实现的数组怎么办。 不是在原数组上进行操作的怎么办。 使用递归实现的排序。 可能并没有在一个数组上进行操作,只是最后返回一个排序好的数组出来。那么我们要如何获得排序中的数组的完整状态呢。 比如快速排序。 最开始不考虑动画,我的实现是这样的: function quickSort(arr){ var len = arr.length,leftArr=[],rightArr=[],tag; if(len<2){ return arr; } tag = arr[0]; for(i=1;i<len;i++){ if(arr[i]<=tag){ leftArr.push(arr[i]) }else{ rightArr.push(arr[i]); } } return quickSort(leftArr).concat(tag,quickSort(rightArr)); } 然后为了考虑动画,我改写了它的逻辑,让它在同一个数组上进行了实现。 其实是在递归的时候传入了当前的的子数组在原数组中的起始位置。从而在原数组上进行了操作。 用了两种方法来实现方式。在排序逻辑上略有不同。 第一种是先跟远处的对比。遇到比自己小的放到自己前面去。循环序号+1。比自己大的放到当前排序子数组的最后面去,循环序号不变。直到排列完成。 这种方法的缺点是即使是一个有序数组。它也会重新排。 第二种方法是 除了标记位,再设置一个对比位。 遇到比自己小的,放到前面去,标记位的位置+1,标记位与对比位之间所有的往后面移动一个位置。 遇到比自己大的。标记位不变,对比位+1。 这种方法的缺点是对数组进行的操作太多。优点是对有序数组不会再排。 方式一: function quickSort(arr,a,b,qArr){ var len = arr.length,leftArr=[],rightArr=[],tag,i,k,len_l,len_r,lb,ra,temp; if(a == undefined && b == undefined){ a = 0; b= arr.length-1;//初始化起始位置。 } if(qArr == undefined){ qArr = arr.slice(); } if((len == 2 && arr[0] == arr[1])||len<2){ return arr; } tag = qArr[a]; for (i = 1; i < len;) { if(qArr[a+i]<=tag){ leftArr.push(qArr[a+i]); qArr[a+i-1] = qArr[a+i]; qArr[a+i] = tag; k = a+i; i++; }else{ if(leftArr.length+rightArr.length == len-1){ break; } temp = qArr[a+i]; qArr[a+i] = qArr[b-rightArr.length]; qArr[b-rightArr.length] = temp; rightArr.push(temp); k = a+i-1; } this.pushHis(qArr.slice(),a,b,k); } len_l = leftArr.length; len_r = rightArr.length; if(len_l== 0){ lb = a; }else{ lb = a+len_l -1; this.sort(leftArr,a,lb,qArr); } if(len_r == 0){ ra = b; }else{ ra = b + 1 - len_r; this.sort(rightArr,ra,b,qArr) } return qArr } 方式二: function quickSort2(arr,a,b,qArr){ var len = arr.length,leftArr=[],rightArr=[],tag,i,j,k,temp,len_l,len_r,lb,ra; if(a == undefined && b == undefined){ a = 0; b= arr.length-1;//初始化起始位置。 } if(qArr == undefined){ qArr = arr.slice(); } if(len<2){ return arr; } if(len == 2 && arr[0] == arr[1]){ return arr; } tag = qArr[a]; for (i = 1,k = 0; i < len;) { if(qArr[a+i]>=tag){ rightArr.push(qArr[a+i]); i++; }else{ temp = qArr[a+i]; for(j = a+i;j>a+k;j--){ qArr[j] = qArr[j-1]; // this.pushHis(qArr.slice(),a,b,a+k); } qArr[a+k] = temp; leftArr.push(temp); k++; i++; } this.pushHis(qArr.slice(),a,b,a+k,i-1); } len_l = leftArr.length; len_r = rightArr.length; if(len_l== 0){ lb = a; }else{ lb = a+len_l -1; this.sort(leftArr,a,lb,qArr); } if(len_r == 0){ ra = b; }else{ ra = b + 1 - len_r; this.sort(rightArr,ra,b,qArr) } return qArr; } 具体的不同下面会有动画演示。 问题四:动画的流畅。 排序动画的DOM操作是很多的很快的。这里我做的优化只是让每一个排序步骤只涉及一个DOM操作。 全部由JavaScript拼接好,一次替换。类似下面的代码。 效果图: 主要实现了: 冒泡排序JavaScript动画演示 插入排序JavaScript动画演示 选择排序JavaScript动画演示 快速排序JavaScript动画演示 归并排序JavaScript动画演示 希尔排序JavaScript动画演示

liujae 2019-12-02 01:19:06 0 浏览量 回答数 0

问题

Javascript数组:删除另一个数组中包含的所有元素

保持可爱mmm 2020-01-16 17:05:31 0 浏览量 回答数 1

问题

PHP CI框架开发向javascript传递参数问题

小旋风柴进 2019-12-01 20:23:17 1166 浏览量 回答数 1

问题

PHP CI框架开发向javascript传递参数问题

小旋风柴进 2019-12-01 20:08:24 1051 浏览量 回答数 1

问题

使用Javascript数组计算集合差异的最快或最优雅的方法是什么?

保持可爱mmm 2020-02-08 13:18:51 1 浏览量 回答数 1

问题

web页面实现数据筛选、排序等功能的思路

小旋风柴进 2019-12-01 19:34:04 1128 浏览量 回答数 1

问题

如何检查JavaScript中的变量是否为数组?

保持可爱mmm 2020-01-08 15:48:03 0 浏览量 回答数 1

问题

Javascript-在另一个数组内插入一个数组

保持可爱mmm 2020-02-08 14:42:12 0 浏览量 回答数 1

回答

一、类数组对象定义:拥有length属性,其它属性(索引)为非负整数不具有数组所具有的方法 常见的类数组有arguments和NodeList,《javascript权威指南》里面给出了一个鉴别对象是否是类数组的函数:// Determine if o is an array-like object.// Strings and functions have numeric length properties, but are // excluded by the typeof test. In client-side JavaScript, DOM text// nodes have a numeric length property, and may need to be excluded // with an additional o.nodeType != 3 test.function isArrayLike(o) {if (o && // o is not null, undefined, etc. typeof o === 'object' && // o is an object isFinite(o.length) && // o.length is a finite number o.length >= 0 && // o.length is non-negative o.length===Math.floor(o.length) && // o.length is an integer o.length < 4294967296) // o.length < 2^32 return true; // Then o is array-like else return false; // Otherwise it is not}二、类数组转换为数组的方法1、Array.prototype.slice.call() 这种方法是借用了数组原型中的slice方法,返回一个数组。slice方法的内部实现:Array.prototype.slice = function(start,end){ var result = new Array(); start = start || 0; end = end || this.length; //使用call之后this指向了类数组对象 for(var i = start; i < end; i++){ result.push(this[i]); } return result; } 一个通用的转换函数:var toArray = function(s){try{ return Array.prototype.slice.call(s); } catch(e){ var arr = []; for(var i = 0,len = s.length; i < len; i++){ arr[i] = s[i]; } return arr; } 2、Array.from() Array.from()是ES6中新增的方法,可以将两类对象转为真正的数组:类数组对象和可遍历(iterable)对象(包括ES6新增的数据结构Set和Map)。var arrayLike = {'0':'a', '1':'b', '2':'c', length:3};var arr = Array.from(arrayLike);//['a','b','c']//把NodeList对象转换为数组,然后使用数组的forEach方法var ps = document.querySelectorAll('p');Array.from(ps).forEach(p){console.log(p);}); //转换arguments对象为数组function foo(){var args = Array.from(arguments); //...}//只要是部署了Iterator接口的数据结构,Array.from都能将其转换为数组Array.from('hello'); //['h','e','l','l','o']3、扩展运算符(…) 同样是ES6中新增的内容,扩展运算符(…)也可以将某些数据结构转为数组//arguments对象的转换function foo(){var args = [...arguments];}//NodeList对象的转换[...document.querySelectorAll('p')]扩展运算符实际上调用的是遍历器接口,如果一个对象没有部署此接口就无法完成转换ps:来源网络

元芳啊 2019-12-02 00:54:50 0 浏览量 回答数 0

问题

如何在JavaScript中将“参数”对象转换为数组?

保持可爱mmm 2020-01-14 15:04:35 0 浏览量 回答数 1

回答

让我们先看看最直接最粗暴的方式  没错,答案就是:[1, NaN, NaN],那为什么答案是[1, NaN, NaN]呢? 1.让我们先了解一下map函数的定义  JavaScript Array map() 方法  定义和用法   map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。   map() 方法按照原始数组元素顺序依次处理元素。   注意: map() 不会对空数组进行检测。   注意: map() 不会改变原始数组。   因为 parseInt 需要两个参数 (val, radix),但 map 传了 3 个 (element, index, array)   即原例子相当于   [parseInt("1",0),parseInt("2",1),parseInt("3",2)]   分析:   按十进制转换输出1   1不在2~36之间,输出NaN   字符串"3"里面没有合法的二进制数,输出NaN   所以最后结果是[1,NaN,NaN]

景凌凯 2020-04-03 22:06:38 0 浏览量 回答数 0

问题

获取数组中的所有非唯一值(即:重复/多次出现)

保持可爱mmm 2020-01-15 09:55:57 0 浏览量 回答数 1

问题

如何使用JavaScript将长数组拆分为较小的数组

保持可爱mmm 2020-02-08 19:45:34 0 浏览量 回答数 1

回答

清除现有数组的方法A: 方法1 (这是我对问题的原始回答) A = []; 此代码会将变量A设置为新的空数组。如果您在其他任何地方都没有引用原始数组,A那么这是完美的,因为这实际上会创建一个全新的(空)数组。您应谨慎使用此方法,因为如果您从另一个变量或属性引用了此数组,则原始数组将保持不变。仅当仅通过其原始变量引用该数组时,才使用它A。 这也是最快的解决方案。 此代码示例显示使用此方法时可能遇到的问题: var arr1 = ['a','b','c','d','e','f']; var arr2 = arr1; // Reference arr1 by another variable arr1 = []; console.log(arr2); // Output ['a','b','c','d','e','f'] 方法2(由Matthew Crumley 建议) A.length = 0 这将通过将其长度设置为0来清除现有数组。有人认为这可能不适用于JavaScript的所有实现,但事实并非如此。当在ECMAScript 5中使用“严格模式”时,它也可以工作,因为数组的length属性是读/写属性。 方法3(由Anthony 建议) A.splice(0,A.length) 使用.splice()将完美地工作,但是由于该.splice()函数将返回一个包含所有已删除项目的数组,因此它实际上将返回原始数组的副本。基准表明,这对性能没有任何影响。 方法4(由tanguy_k 建议) while(A.length > 0) { A.pop(); } 该解决方案不是很简洁,它也是最慢的解决方案,与原始答案中引用的早期基准相反。 性能 在清除现有数组的所有方法中,方法2和3在性能上非常相似,并且比方法4快得多。请参阅此基准测试。 正如Diadistis在下面的回答中所指出的那样,用于确定上述四种方法的性能的原始基准存在缺陷。原始基准测试重复使用了已清除的数组,因此第二次迭代将清除已经为空的数组。 以下基准测试可修复此缺陷:http : //jsben.ch/#/hyj65。它清楚地表明方法#2(长度属性)和#3(拼接)是最快的(不计算不会改变原始数组的方法#1)。 问题来源于stack overflow

保持可爱mmm 2020-01-08 15:34:18 0 浏览量 回答数 0

回答

改变原数组: pop():删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不 改变数组,并返回 undefined 值。arrayObject.pop() *push():*push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组,arrayObject.push(newelement1,newelement2,….,newelementX) reverse():该方法会改变原来的数组,而不会创建新的数组。arrayObject.reverse() shift():数组的第一个元素从其中删除,并返回第一个元素的值,如果数组是空的,那么 shift() 方法将不进行任何操作. sort():对数组的引用。请注意,数组在原数组上进行排序,不生成副本。arrayObject.sort(sortby) (如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。 若 a 大于 b,则返回一个大于 0 的值。) *splice():*splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组 arrayObject.splice(index,howmany,item1,…..,itemX) unshift():unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。arrayObject.unshift(newelement1,newelement2,….,newelementX)返回arrayObject 的新长度 不改变原数组: concat():用于连接两个或多个数组,仅会返回被连接数组的一个副本,arrayObject.concat(arrayX,arrayX,……,arrayX) jion():返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,arrayObject.join(separator) slice():如果数组是空的arrayObject.slice(start,end) 其他: *toSource()*toSource() 方法表示对象的源代码。 该原始值由 Array 对象派生的所有对象继承。 toSource() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。object.toSource() toString():arrayObject 的字符串表示。返回值与没有参数的 join() 方法返回的字符串相同arrayObject.toString() toLocaleString():把数组转换为本地字符串。arrayObject.toLocaleString() valueOf():valueOf() 方法返回 Array 对象的原始值。 该原始值由 Array 对象派生的所有对象继承。 arrayObject.valueOf() 参考:https://blog.csdn.net/love07070707/article/details/79888566

peter517517 2020-02-09 10:40:44 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板