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() :返回一个给定对象自身的所有可枚举属性的值,不包括原型链。
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;
};
有一个数组,我们需要通过js对数组的元素进行随机排序,然后输出,这其实就是洗牌算法,首页需要从元素中随机取一个和第一元进行交换,然后依次类推,直到最后一个元素。
程序员必须知道的10大算法:快速排序算法、堆排序算法、归并排序、二分查找算法、BFPRT(线性查找算法)、DFS(深度优先搜索)、BFS(广度优先搜索)、Dijkstra算法、动态规划算法、朴素贝叶斯分类算法
使用原生js将一维数组中,包含连续的数字分成一个二维数组,这篇文章分2种情况介绍如何实现?1、过滤单个数字;2、包含单个数字。
给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[100, 4, 200, 1, 3, 2],最长的连续数字序列是[1, 2, 3, 4]。此方法不会改变传入的数组,会返回一个包含最大序列的新数组。
racking.js 是一个独立的JavaScript库,实现多人同时检测人脸并将区域限定范围内的人脸标识出来,并保存为图片格式,跟踪的数据既可以是颜色,也可以是人,也就是说我们可以通过检测到某特定颜色,或者检测一个人体/脸的出现与移动,来触发JavaScript 事件。
JS常见算法题目:xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe、数组去重、统计字符串中出现最多的字母、字符串反序、深拷贝、合并多个有序数组、约瑟夫环问题
这篇文章主要是针对一种最常见的非对称加密算法——RSA算法进行讲解。其实也就是对私钥和公钥产生的一种方式进行描述,RSA算法的核心就是欧拉定理,根据它我们才能得到私钥,从而保证整个通信的安全。
PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由 根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry Page)之姓来命名。
什么是回文字符串?即字符串从前往后读和从后往前读字符顺序是一致的。例如:字符串aba,从前往后读是a-b-a;从后往前读也是a-b-a
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 ;当尾数为0时候需要进行舍去。解法:转字符串 再转数组进行操作,看到有人用四则运算+遍历反转整数。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!