JavaScript之数组方法

2020-10-19  本文已影响0人  执笔于情

之前就想过整理数组方法的,但是一直没有时间,现在趁有时间整理下

// 构造函数
var arr = new Array(); // 创建一个空数组

// 赋值空数组
var arr = []; // 创建空数组

数组方法也有很多,咱们一步一步来吧。首先数组方法分为原型方法(原生方法)和从Object对象继承的方法。

var arr = [1,2,3];
Array.isArray(arr);
// true
var arr = [1,2,3];
arr.toString();
// "1,2,3"
var arr = [1,2,3];
// 不规定分隔符
arr.join();
// "1,2,3"
// 规定分隔符
arr.jion('-');
// "1-2-3"
// 方法不改变原数组,比如继续看arr
arr  // [1,2,3]
var arr = [1,2,3];
arr.push(4,5,6);      // 6      这个6就是返回的数组长度
console.log(arr)
// [1,2,3,4,5,6]        // 已改变了原数组

接着看pop()

// 这次我们不用数字来做操作,方便大家区分
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
arr.pop();  // 返回值' f ',这个' f '就是被删除的值
console.log(arr); // 得出以下结果
['a', 'b', 'c', 'd', 'e']
// 首先我们来看shift()
var arr = ['a','b','c'];
arr.shift(); // 'a'         // 返回删除元素
console.log(arr)
['b','c']               // 已改变原数组
// 如果数组为空,返回undefined
var arr = [];
arr.shift();    //   undefined
接下来我们看看unshift()
var arr = ['a','b','c'];
arr.unshift('1');  //  4       // 返回添加后数组长度
console.log(arr)
['1','a','b','c']        // 已改变原数组
var arr = ['d','a','c','b'];
arr.sort();
console.log(arr)
['a','b','c','d']      // 原数组被改变

// 接着看
var arr = [13, 24, 51, 3];
arr.sort();
console.log(arr);
[13, 24, 3, 51]      // 原数组被改变

// 所以遇到这样的情况,使用的时候最好是封装成一个函数
// 升序排序函数
function sortNumber(a,b){
  return a - b
}
var arr =  [13, 24, 51, 3];
arr.sort(sortNumber);
console.log(arr)
[3, 13, 24, 51]        // 升序

// 降序排序函数
function NumDescSort(a,b){  
     return b - a;  
} 
var arr =  [13, 24, 51, 3];
arr.sort(NumDescSort)
console.log(arr)
[51, 24, 13, 3] 
var arr = [13, 24, 51, 3];
console.log(arr.reverse()); //[3, 51, 24, 13]
console.log(arr); //[3, 51, 24, 13](原数组改变)
var arr = [1,3,5,7];
var arr1 = arr.concat(9,[11,13]);
console.log(arr1); 
[1, 3, 5, 7, 9, 11, 13]
console.log(arr);     
 [1, 3, 5, 7]            //  原数组未被修改
参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

返回值
返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。

var arr = [1,3,5,7,9,11];
var arr1 = arr.slice(1);  // 默认从第0个开始,截取到下标为1(不包括该元素)
console.log(arr1); 
[3, 5, 7, 9, 11]
var arr2 = arr.slice(1,4); // 从第1个开始,截取到下标为4(不包括该元素)
console.log(arr2);
[3, 5, 7]
var arr3 = arr.slice(1,-2); // 从第1个开始,截取到下标为-2,也就是下标为4(不包括该元素),
// 和slice(1,4)相同
console.log(arr3); 
[3, 5, 7]
var arr4 = arr.slice(-4,-1);
// 从第-4开始,反过来从-1开始数,-4的位置在下标2,到-1,也就是下标5,
// 可以理解为slice(2,5),第2截取到第5(不包括该元素)
console.log(arr4);
[5, 7, 9]
console.log(arr);
[1, 3, 5, 7, 9, 11]   //  原数组没变

// 如果还不清楚截取位置,还可以往下看
var arr = [1,3,5,7,9,11];
arr.slice(0,1)   // 返回[1]
arr.slice(0,2)     // 返回[1,3]
arr.slice(0,3)    // 返回[1,3,5]
arr.slice(0,-1)    // 返回[1,3,5,7,9]
arr.slice(0,-2)    // 返回[1,3,5,7]
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。

返回值: 包含被删除项目的新数组,如果有的话
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

var arr = [1,3,5,7,9,11];
// 从第0个元素开始,删除2个元素
var arrRemoved = arr.splice(0,2);   // 返回值[1,3]
console.log(arr);
// [5, 7, 9, 11]
// 从第2个位置开始,删除0个元素,添加元素4,添加元素6
var arrRemoved2 = arr.splice(2,0,4,6);  // 删除0个元素,返回值[]
console.log(arr); 
// [5, 7, 4, 6, 9, 11]
// 从第1个元素开始,删除1个元素,添加元素2,添加元素4
var arrRemoved3 = arr.splice(1,1,2,4); // 返回值[7]
console.log(arr); 
//  [5, 2, 4, 4, 6, 9, 11]
var arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); 
// 2
console.log(arr.lastIndexOf(5));
// 5
console.log(arr.indexOf(5,2));
// 2
console.log(arr.lastIndexOf(5,4));
// 2
console.log(arr.indexOf("5"));
// -1
// indexOf方法就是,如果查找到有,那么返回该元素位置,如果没有,则返回-1,所以我们一般写判断都是
// if(arr.indexOf('5') != -1)  或者if(arr.indexOf('5') > -1)
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25]

// 我们也可以拿来做接口映射,比如
let r = res.map(item => {
    return {
        title: item.name,
        sex: item.sex === 1? '男':item.sex === 0?'女':'保密',
        age: item.age,
        avatar: item.img
    }
})
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(x, index, a){
    console.log(x + '|' + index + '|' + (a === arr));
});
// 输出为:
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x, index) {
    return index % 3 === 0 || x >= 8;
}); 
console.log(arr2); 
// [1, 4, 7, 8, 9, 10]
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.every(function(x) {
    return x < 10;
}); 
console.log(arr2);
// true
var arr3 = arr.every(function(x) {
    return x < 3;
}); 
console.log(arr3); 
// false
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.some(function(x) {
    return x < 3;
}); 
console.log(arr2);
// true
var arr3 = arr.some(function(x) {
    return x < 1;
}); 
console.log(arr3);
// false
// es6中reduce()方法
// 从左往右开始
// 参数:
// prev:它是上一次调用回调时返回的结果,每次调用的结果都会给prev
// cur:当前的元素
// index:当前的索引
// arr:循环的数组
// 返回值:
// ----------函数累计处理的结果
var a = [1,2,3,4,5,6,7,8,9,10]
var str = a.reduce(function(prev,cur,index,arr){
    return prev + cur ;
})
str // 55;

// ------------将二维数组转换成一维
str //  (10) [0,1, 2, 3, 4, 5, 6, 7, 8, 9]
// 数组去重
var arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
var str = arr.sort().reduce((prev, cur)=>{
    if(prev.length===0 || prev[prev.length-1]!==cur){
        prev.push(cur);
    }
    return prev;
}, []);
str // (5) [1, 2, 3, 4, 5]
// es6中reduceRight()方法
// 从右往左开始
// 方法是一样的
// -------------函数累计处理的结果
var a = [1,2,3,4,5,6,7,8,9,10]
var str = a.reduceRight(function(prev,cur,index,arr){
    return prev + cur ;
})
str // 55;
// 方法是一样的,只不过是方法名改变下,但是结果是不会变的
var arr = [1,2,2,3,4,4,3,5,6,5,6,7,7,8,8,9,9,10,10,1];
var arr1 = [...new Set(arr)];
console.log(arr1);
// [1,2,3,4,5,6,7,8,9,10]     // 打印结果

到这里了,如果对你有帮助,帮忙点个赞呗~~

上一篇 下一篇

猜你喜欢

热点阅读