JavaScript模拟数组合并concat
定义和用法
concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
语法
arrayObject.concat(arrayX,arrayX,......,arrayX)
参数 | 描述 |
---|---|
arrayX | 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。 |
返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组
。
我们有两个这样的数组
var arr1 = [1,2,3]; var arr2 = [4,5,6];
任务:合并成这样,请至少提供两种思路。
var arr1 = [1,2,3,4,5,6];
思路一:我们可以把第二个数组里面的值挨个添加到第一个数组的末尾。
1:数组怎么添加内容 ?[] || push || shift
2:怎么向数组最后一个索引添加值? push || [数组.length]
3:怎么挨个向数组一添加内容? for
4: for循环多少次? 你要添加多少就循环多少次,也就是arr2的长度
5: 要添加什么内容?arr2里面的值,怎么获取,arr[?]
代码实现:
var arr1 = [1,2,3]; var arr2 = [4,5,6]; for(var i=0;i<arr2.length;i++){ arr1.push(arr2[i]); } console.log(arr1); //[1, 2, 3, 4, 5, 6]
问题来了,原生js提供的concat方法不会修改原数组(arr1)的内容,而是返回一个新数组。
分析:既然是要返回值,那我们可以定义一个函数,然后再定义一个变量,这个变量来接收我们添加好的值,但是我们会一个问题,那就是不能在arr1上面push内容了,不然还是会修改原数组的内容。于是我觉得要把原数组复制一份,但是又有一个问题,就是对象是引用类型,简单来说虽然我们可以把数组1复制到一个变量中,但是如果我用push或者[]的形式修改里面的值,或者添加,那么我们的原数组也会被修改,(如果你不知道什么是引用类型,可以去看我博客的第一页或者在第二页)这不是我们想要的结果,但是我们必须复制一份arr1。此时你有什么解决方法?
解决数组引用问题:
for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; }
我的思路是把数组1的值挨个的添加到arr3这个数组中,此时的arr3是这样的
console.log(arr3) //[1, 2, 3]
任务:在这个新的数组arr3中添加arr2的所以值,方法和第一步一样,如果忘记了回头看看。
代码实现:
var arr1 = [1,2,3]; var arr2 = [4,5,6]; var arr3 = []; for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; } for(var i=0;i<arr2.length;i++){ arr3.push(arr2[i]); } console.log(arr3);
问题:虽然这个已经实现了数组的合并,但是我每次合并都要重新写一份,那样太麻烦,于是我们得想个办法把它封装成一个函数,下次我们要用的时候调用它就行。
var arr1 = [1,2,3]; var arr2 = [4,5,6,7]; function Concat(arr1,arr2){ var arr3 = []; for(var i=0;i<arr1.length;i++){ arr3[i] = arr1[i]; } for(var i=0;i<arr2.length;i++){ arr3.push(arr2[i]); } return arr3; } console.log(Concat(arr1,arr2));
思路二:
分析:把arr1和arr2都转换成字符串,然后将这两段字符串相加得到一个组合,然后再把这个字符串转成数组。
代码实现:
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; var arr3 = (arr1.join(",")+","+arr2.join(",")).split(",");
出了点小问题,这个这个数组里面的值是字符串了。
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
解决思路:遍历这个数组,挨个把他们转换成数字。
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; var arr3 = (arr1.join(",")+","+arr2.join(",")).split(","); for(var i=0;i<arr3.length;i++){ arr3[i] = +arr3[i]; } console.log(arr3);
课外扩展:继承版
var arr1 = [1,2,3]; var arr2 = [4,5,6,7,8,9]; Array.prototype.Concat = function(arr){ var arr3 = []; for(var i=0;i<this.length;i++){ arr3[i] = this[i]; } for(var i=0;i<arr.length;i++){ arr3.push(arr[i]); } return arr3; } console.log(arr1.Concat(arr2));
以上所述是小编给大家介绍的JavaScript模拟数组合并concat的相关知识,希望对大家有所帮助!
- JS数组合并push与concat区别分析
- js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
- JavaScript使用concat连接数组的方法
- JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
- JS数组方法concat()用法实例分析
- JavaScript中使用concat()方法拼接字符串的教程
- 深入理解javascript中concat方法
- javascript使用 concat 方法对数组进行合并的方法
- Javascript连接多个数组不用concat来解决
- js采用concat和sort将N个数组拼接起来的方法
- javascript中数组的concat()方法使用介绍
- javascript concat数组累加 示例
- JS Array创建及concat()split()slice()的使用方法
- 浅谈JavaScript的push(),pop(),concat()方法
- JS数组降维的实现Array.prototype.concat.apply([], arr)
- JavaScript中concat复制数组方法浅析
- javascript数组中的concat方法和splice方法
- JavaScript的concat方法实例代码(数组连接)
相关文章
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
这篇文章主要介绍了Taro UI开发小程序实现左滑喜欢右滑不喜欢效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05jQuery设置和获取select、checkbox、radio的选中值方法
select、checkbox、radio是很常用的表单控件,这篇文章主要介绍了jQuery设置和获取select、checkbox、radio的选中值方法,有兴趣的可以了解一下。2017-01-01PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Phantom JS是一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG2015-08-08js RuntimeObject() 获取ie里面自定义函数或者属性的集合
取得ie 里面 自定义函数或者属性的集合 使用RuntimeObject()实现,需要的朋友可以参考下。2010-11-11详解JavaScript中Proxy与Object.defineProperty的区别
Proxy和Object.defineProperty都是JavaScript中用于实现对象属性拦截和代理的机制,但它们在功能和应用方面有一些区别,本文通过代码示例详细介绍了二者的区别,感兴趣的朋友可以参考下2023-06-06
最新评论