var arr = [1,2,3,4,5,4,3,2,1];
数组求和:
var sum = arr.reduce(function(pre,curr){
return pre+curr;
});
alert(sum);//25
数组求最大值:
- sort()排序方法:
arr.sort(function(a,b){ return a-b; }) alert(arr[arr.length-1]);
- reduce()方法:
reduce():对数组中的所有元素调用指定的回调函数,该回调函数的返回值在下一次调用该回调函数时作为参数提供。
arr.reduce(function(pre,curr,index,arr){ ... }, init);
参数:
- arr:表示原数组;
- pre:表示上一次调用回调函数时的返回值,或者初始值Init;
- curr:表示当前正在处理的数组元素;
- index:表示当前正在处理的数组元素的索引;
var max = arr.reduce(function(pre,curr){ return Math.max(pre,curr); }); alert(max);
- apply()方法:
对Math.max.apply(Math,arr)的理解:
Math是一个对象,max是它的方法,max接受的参数形式是Math.max(num1, num2, num3, …)。
apply的作用是改变函数的this指向。
apply的第一个参数不能省略。由于Math.max()内部不使用this,所以写成null也没关系,apply应用到了全局对象(window/global)上。
apply的第二参数是数组。
所以,不能使用Math.max(arr),可以使用Math.max.apply(Math,arr)来替换。var max=Math.max.apply(Math,arr);
判断数组中是否有重复的值:
- Set:
if((new Set(arr)).size != arr.length){ alert("数组有重复值") }
- reduce()方法:
arr.reduce(function(pre,curr){ if(pre == curr){ alert("数组有重复值"); } },[]);
- sort()排序方法:
arr.sort(function(a,b){ return a-b; }) for(var i=0;i<arr.length;i++){ if(arr[i] == arr[i+1]){ alert("数组有重复值") } }
数组去重:
- 扩展运算符和Set:
[...new Set(arr)]
- Array.from()方法和Set:
Arraay.from(new Set(arr))
- reduce()方法:
var delRepeat= arr.reduce(function(pre,curr){ pre.indexOf(curr) === -1 && pre.push(curr); return pre; },[]); alert(delRepeat);
- sort()方法:
var delRepeat = [ arr.sort(function(a,b){ return a-b; }) for(var i=0;i<arr.length;i++){ if(arr[i] != arr[i+1]){ delRepeat .push(arr[i]); } }
判断一个数是否为质数:
质数:表示大于1的自然数中,只能被 1 和自己整除的数。
- 质数只能被 1 和自己整除,不能被 2 到 num - 1 数字整除。
function isPrimeNumber (num) { for (var i = 2; i < num; i++) { if (num % i === 0) return false } return true }
- 一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于它的平方根,一个大于等于它的平方根,所以只要遍历到等于它的平方根即可。
比如:16 可以被分解,那么是 2 * 8,2 小于 16 的平方根 4,8 大于 16 的平方根 4。
function isPrimeNumber (num) { var temp = parseInt(Math.sqrt(num)) for (var i = 2; i <= temp; i++) { if (num % i === 0) return false } return true }
将变量作为一个对象的 key,push 进一个数组:
变量需要用中括号括住。
var arr = [];
for(let i=0; i<obj.length; i++){
arr.push({
[i]:obj[i]
})
}
每隔 n 个分为一组:
functuin grouping(size) {
var result = [];
for(var i=0; i<arr.length; i+=size){
result.push(arr.slice(i,i+size))
}
}
遍历数组的同时删除指定项:
var arr = ['lee', 'Bob', 'Mary', 'Tom']
for(var i = arr.length -1; i >= 0 ; i--){
if(arr[i] === 'Bob' || arr[i] === 'Mary'){
arr.splice(i, 1)
}
}
var arr = ['lee', 'Bob', 'Mary', 'Tom'] for(var i = 0; i < arr.length; ; i++){ if(arr[i] === 'Bob' || arr[i] === 'Mary'){ arr.splice(i, 1) } }
不能使用这种方式,原因在于,这种方式 silce 会导致数组元素的下标值改变,导致漏遍历元素。