javascript数组中常用的操纵介绍(代码示例)
本篇文章给大家带来的内容是关于javascript数组中常用的操纵介绍(代码示例),有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。
一、不改动原数组,返回新数组(字符串)
1、concat() 连接两个或者多个数组,两边的原始数组都不会转变,返回的是被连接数组的一个副本。
2、join() 把数组中所有的元素放入到一个字符串中,返回字符串
var a = [1,2,3]; a.join([4,5,6]); // "14,5,624,5,63" a.join('sau'); // "1sau2sau3"
3、slice() 从开端到完毕(不包罗完毕)选中数组的一部分浅拷贝到一个新数组
var a = [1,2,3,4,5]; a.slice(0,0); //[] a.slice(0,1); //[1] a.slice(2,4); //[3,4] a.slice(0,5); //[1,2,3,4,5] a.slice(10,1); //[] a.slice(4); //[5]
4、map() 创立一个新的数组并返回,其中新数组的每一个元素由调取原始数组中的每一个元素施行供给的函数得来,原数组不变
5、every() 对数组中的每一个元素都施行一次指定的回调函数,直到回调函数返回false,此时every()返回false并不再连续施行,假如回调函数都对每一个元素都返回true,那么every()返回true。
6、some() 对数组中的每一个元素都施行一次指定的回调函数,直到回调函数返回true,此时some()返回true并不再施行。假如回调函数对每一个元素都返回false,那么some()将返回false。
7、filter() 创立一个新数组,其中包括通过所供给函数实现的测试的所有元素。
二、改动原数组
1、forEach() 针对每一个元素施行供给的函数。会修改本来的数组,不会返回施行结果,返回undefined。
2、pop() 删除数组最后一个元素,返回被删除的元素的值,假如数组为空,则不改动数组,返回undefined。
3、push() 向数组末尾增加一个或多个元素,返回改动后数组的长度。
4、reverse() 颠倒数组中元素的位置,返回该数组的援用。
5、shift() 从数组中删除第一个元素,改动原数组,并返回该元素的值。
6、unshift() 将一个或者多个元素增加到数组的开头,并返回新数组的长度。
7、sort() 对数组的元素停止排序,返回数组。排序不必然是不乱的。默许排序次序是按照字符串unicode码点。
8、splice() 向数组中增加/删除元素,然后返回被删除的新数组()。
var a = [1,2,3,4,5]; a.splice(0,1); //删除从0位置开端的1个 返回[1] a为[2,3,4,5] a.splice(1,0,99) //在1的位置插入99 [2,99,3,4,5] a.splice(1,1,88) //99更换为88 [2,88,3,4,5]
三、遍历办法
1、猎取属性名:for...in 和object.key()的不同
答:1、for in 遍历对象可以枚举的属性名列表,包罗[[prototype]]原型链;
2、Object.keys() 只查寻属性名可否在对象中,返回一个数组,包括所有可以枚举的属性名;
3、Object.getOwnPropertyNames()只查寻属性名可否在对象中,返回一个数组,包括所有的属性名,不管可否可枚举。
2、猎取属性值: for... of 和object.values()
for of 语句:遍历可迭代对象的可枚举属性值列表,包罗[[propertype]]原型链;
object.values() :返回一个给定对象本身的所有可枚举属性的值,不包罗原型链。
四、ES6语法Map键值对转化为数组
new Map创立一个map
// new Map创立一个map let map = new Map([[1,"one"], [2,"two"], [3,"three"]]); map.set(4, "four");
// 猎取所有键值对 console.log("猎取key") console.log([...map.keys()]) // 输出[1, 2, 3, 4] console.log("猎取value") console.log([...map.values()]) // 输出[one, two, three, four] console.log("猎取map数组") console.log([...map]) // 输出[[1, "one"], [2, "two"], [3, "three"], [4, "four"]]
五、两个升序的数组合并成一个升序数组
1、时间复杂度O(M+N),空间复杂度O(M+N)
function merge(left, right){ let result = [], il = 0, ir = 0; while (il < left.length && ir < right.length) { result.push(left[il] < right[ir] ? left[il++] : right[ir++]); console.log(result); } return result.concat(left.slice(il)).concat(right.slice(ir)); }
2、时间复杂度O(M+N),空间复杂度O(1)
// m, n 是数组长度 function merge(left, m, right, n) { var i = m - 1, j = n - 1, writeIdx = m + n - 1; while (i >= 0 && j >= 0) left[writeIdx--] = left[i] > right[j]? left[i--] : right[j--]; while (j >= 0) left[writeIdx--] = right[j--]; return left; }
六、数组反复问题
(一)数组去重
1、reduce办法
const distinct = arr => arr.sort().reduce( (init, current) => { if (init.length === 0 || init[init.length - 1] !== current) { init.push( current ); } return init; }, []); let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; distinct(arr); // [1, 2, 3, 4, 5]
2、filter办法
const distinct = arr => arr.filter( (element, index, self) => {
return self.indexOf( element ) === index; }); let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; distinct(arr); // [1, 2, 3, 5, 4]
(二)排序数组去重
/** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(nums) { if(!nums || nums.length == 0) return 0; let len = 0; for(let i = 1; i < nums.length; i++) { if (nums[len] != nums[i]) { nums[++ len] = nums[i]; } } return len + 1; };
(三)推断数组可否存在反复
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { let hashMap = new Map(); for(let i = 0; i < nums.length; i++) { if( hashMap.has(nums[i]) ) { return true; } hashMap.set(nums[i], 1); } return false; };
七、两个数组的交集
给定两个数组,写一个办法来运算它们的交集。
例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
留意:1、出结果中每个元素显现的次数,应与元素在两个数组中显现的次数一致。2、
我们可以不思考输出结果的次序。
跟进:1、假如给定的数组已经排好序呢?你将怎样优化你的算法?2、假如 nums1 的大小比 nums2 小许多,哪种办法更优?3、假如nums2的元素储备在磁盘上,内存是有限的,你不克不及一次加载所有的元素到内存中,你该如何办?
解法:
/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { var map1 = new Map(); var number = []; for(var i = 0; i < nums1.length; i++) { var map1Value = map1.get(nums1[i]); map1.set( nums1[i], ( map1Value ? map1Value : 0 ) + 1 ); } for(var i = 0; i < nums2.length; i++) { if( map1.has(nums2[i]) && map1.get(nums2[i]) != 0 ) { number.push(nums2[i]); map1.set( nums2[i], map1.get(nums2[i]) - 1 ); } } return number; };
八、寻出一个数组中只显现一次的数字
给定一个非空整数数组,除了某个元素只显现一次之外,其余每个元素均显现两次。寻出阿谁只显现了一次的元素。
/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { let number = 0; for(let i = 0; i < nums.length; i++) { number ^= nums[i]; } return number; };
本篇文章到这里就已经全部完毕了,更多其他出色内容可以关注PHP中文网的JavaScript教程视频栏目!
以上就是javascript数组中常用的操纵介绍(代码示例)的具体内容,更多请关注百分百源码网其它相关文章!