改变原数组的方法和不改变原数组的方法
1.改变原数组的方法
var arr = []
arr.splice()
arr.reverse()
arr.fill()
arr.copyWithin()
arr.sort()
arr.push()
arr.pop()
arr.unshift()
arr.shift()
arr.splice()
// 1.删除功能。
let arr = ['a', 'b', 'c', 'd'];
// 从下标0开始,删除2个元素,并接收删除的元素。
let deletedElements = arr.splice(0, 2);
console.log(arr); // ["c", "d"]
console.log(deletedElements); //["a", "b"]
// 2.插入功能
arr = ['a', 'b', 'e', 'f'];
// 从下标2处开始,删除0个元素,插入c, d两个元素。
arr.splice(2, 0, 'c', 'd');
console.log(arr); // ["a", "b", "c", "d", "e", "f"]
// 3.替换功能。
arr = ['a', 'a', 'a', 'b'];
// 从下标1处开始,删除3个元素,插入b,c两个元素。
arr.splice(1, 3, 'b', 'c');
console.log(arr); // ["a", "b", "c"]
arr.reverse()
// reverse方法没有参数 原数组改变了 返回的数组也是改变后的数组
var arr = [4, 5, 6, 3, 2, 5, 4, 3, 9];
var arrReturn = arr.reverse();
console.log(arr); //[9, 3, 4, 5, 2, 3, 6, 5, 4]
console.log(arrReturn); //[9, 3, 4, 5, 2, 3, 6, 5, 4]
arr.fill()
// arr.fill() 是 ES6 的新方法。
// fill() 方法用于将一个固定值替换数组的元素。
// 语法: array.fill(value, start, end)
// 1.value 必需。填充的值。
// 2.start 可选。开始填充位置。
// 3.end 可选。停止填充位置 (默认为 array.length)填充是从 start 位置开始,到 end-1 位置结束,不包含end位置.直接修改原数组
let arr1 = [1, 2, 3, 4, 56, 7, 7, 8, 9];
arr1.fill(4, 2, 5);
console.log(arr1); // [1, 2, 4, 4, 4, 7, 7, 8, 9]
let arr2 = [1, 2, 3, 4, 56, 7, 7, 8, 9];
arr2.fill(4);
console.log(arr2); // [4, 4, 4, 4, 4, 4, 4, 4, 4]
arr.copyWithin()
// 数组实例的copyWithin()方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
// 它接受三个参数。
// target(必需):从该位置开始替换数据。
// start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示倒数。
// end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
// 这三个参数都应该是数值,如果不是,会自动转为数值。
[1, 2, 3, 4, 5].copyWithin(0, 3);
// 结果为 [4, 5, 3, 4, 5]
// 上面代码表示将从 3 号位直到数组结束的成员(4 和 5),复制到从 0 号位开始的位置,结果覆盖了原来的 1 和 2。下面是更多例子。
// 将3号位复制到0号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// 将索引从3开始到4结束 复制到索引1的位置
// -2相当于3号位,-1相当于4号位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
arr.sort()
// arr.sort() 是给数组进行排序
var peiData= [
{ name: '输电', y: 28, h: 50 },
{ name: '变电', y: 20, h: 40 },
{ name: '配电', y: 10, h: 20 },
{ name: '新业务', y: 3, h: 6 }
]
peiData.sort(function (a, b) {
return a.y - b.y
})
console.log(peiData);
// 已数组中的每一项的y值比较 进行排序
arr.push()
// push方法 :接受任意数量的参数 把参数逐个添加到数组的末尾 改变了原数组 返回插入后数组的长度
var arr1 = [1, 2, 3, 4, 5, 6];
var newarr = arr1.push(7, 8, 9, 10);
console.log(arr1); // arr1[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 改变了原数组
console.log(newarr); // 10 返回插入后数组的长度
// 下面是在接数据时的用法
var newval = [
{ name: '输电', y: 28 },
{ name: '变电', y: 20 },
{ name: '配电', y: 10 },
{ name: '新业务', y: 3 }
];
var peiData = [];
newval.forEach((item) => {
peiData.push({
name: item.name,
y: item.y * 1,
h: item.y * 1.5
});
});
console.log(peiData);
// peiData结果为----
[
{ name: '输电', y: 28, h: 42 },
{ name: '变电', y: 20, h: 30 },
{ name: '配电', y: 10, h: 15 },
{ name: '新业务', y: 3, h: 4.5 }
];
arr.pop()
// pop : 删除数组中的最后一个 元素 并返回 影响原数组
var arr = [1, 3, 5, 7];
console.log(arr.pop()); // 输出 7
console.log(arr); // [1,3,5]
arr.unshift()
// unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
// 返回值
// 把指定的值添加到数组的开头之后的新长度。
// 说明
// unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。
// 请注意:unshift() 方法不创建新的创建,而是直接修改原有的数组。
// 提示和注释
// 注释:该方法会改变数组的长度。
// 注释:unshift() 方法无法在 Internet Explorer 中正确地工作!
// 提示:要把一个或多个元素添加到数组的尾部,请使用 push() 方法。
var arr = new Array();
arr[0] = 'George';
arr[1] = 'John';
arr[2] = 'Thomas';
document.write(arr + '<br />');
document.write(arr.unshift('William') + '<br />');
document.write(arr);
// 输出结果为
// George, John, Thomas;
// 4;
// William, George, John, Thomas;
arr.shift()
// shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
var arr = ['北京', '上海', '广州', '天津'];
var arr1 = arr.shift(); // 有返回值 用arr1接受一下
console.log(arr); //['上海', '广州', '天津']
console.log(arr1); // 北京
1.不改变原数组的方法
var arr = []
arr.slice()
arr.map()
arr.forEach()
arr.every()
arr.some()
arr.filter()
arr.reduce()
arr.entries()
arr.find()
arr.concat('1',['2','3']) //[1,2,3]
arr.slice()
// slice方法 主要用来截取数组 原数组不发生变化 返回一个新数组
var arr1 = ['arr1', 'arr2', 'arr3', 'arr4', 'arr5', 'arr6'];
// 传入两个参数 一个是开始截取的下标 一个是结束截取的下标
var newarr1 = arr1.slice(1, 5);
console.log(newarr1); // ["arr2", "arr3", "arr4", "arr5"] 下标为1, 2, 3, 4的值都被截取出来了 但是没有下标为5的值 所以截取并的不包括第二个参数
console.log(arr1); // ["arr1", "arr2", "arr3", "arr4", "arr5", "arr6"]
// 传入一个参数 表示需要开始截取的下标 默认截取从开始截取的下标开始到数组结束
var newarr2 = arr1.slice(1);
console.log(newarr2); // [ "arr2", "arr3", "arr4", "arr5", "arr6"]; 可以看到除了下标为1的都被截取了
arr.map()
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map((x) => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
// 下面是在处理数据上用的 用于把name和value 分别拆成一个新的数组
var allData = [
{ name: '北京', value: 30 },
{ name: '伤害', value: 1946 },
{ name: '陕西', value: 5407 },
{ name: '西安', value: 8466 },
{ name: '广州', value: 5666 },
{ name: '深圳', value: 35 }
];
var provinceArr = this.allData.map((item) => {
return item.name;
});
var valueArr = this.allData.map((item) => {
return item.value;
});
console.log(provinceArr); // ['北京', '伤害', '陕西', '西安', '广州', '深圳']
console.log(valueArr); // [30, 1946, 5407, 8466, 5666, 35]
arr.forEach()
var arr = [1, 3, 5, 13, 2];
var res = arr.forEach(function (item, index) {
console.log(item, index);
});
console.log(res); //forEach的返回值为undefined,
// 下面是我在项目里运用过的
// 下面是在接数据时的用法
var newval = [
{ name: '输电', y: 28 },
{ name: '变电', y: 20 },
{ name: '配电', y: 10 },
{ name: '新业务', y: 3 }
];
var peiData = [];
newval.forEach((item) => {
peiData.push({
name: item.name,
y: item.y * 1,
h: item.y * 1.5
});
});
console.log(peiData);
// peiData结果为----
[
{ name: '输电', y: 28, h: 42 },
{ name: '变电', y: 20, h: 30 },
{ name: '配电', y: 10, h: 15 },
{ name: '新业务', y: 3, h: 4.5 }
];
arr.every()
// every()方法会返回一个Boolean类型的值,该值取决了数组中是否所有的元素满足给定的条件
// every()为数组中的每一个元素执行一次回调函数,如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测;如果所有的元素都满足给定的条件,那么将返回一个true
// demo如下:
var arr = [1, 8, 19, 48, 10];
var flag = arr.every((item) => {
return item < 100;
});
// var flag = arr.every(function (item) {
// return item > 100;
// });
console.log(flag); // true
arr.some()
// some()方法会返回一个Boolean类型的值,该值取决了数组中是否有元素满足给定的条件
// some()为数组中的每一个元素执行一次回调函数,直到找到一个使得回调函数返回一个“真值”(即可转换为布尔值 true 的值),如果找到了这样一个值,some() 将会立即返回 true;否则,some() 返回 false
// demo如下:
let arr = [10, 20, 40, 50, 60];
let flag = arr.some((item) => {
return item >= 50;
});
/*
let flag = arr.some(function(item) {
return item <= 50;
})
*/
console.log(flag); // true
arr.filter()
// 1、创建新数组
// 2、不改变原数组
// 3、输出的是判断为true的数组元素形成的新数组
// 4、回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
// 5、使用return操作输出,会循环数组每一项,并在回调函数中操作
var arr = [1, 2, 3, 4, 5];
var newArr = arr.filter(function (item, index) {
return item > 2 && item < 5; //根据判断为true来遍历循环添加进新数组 返回大于2 小于5 的数 并形成一个新数组
});
console.log(newArr); //打印新数组 [3,4]
console.log(arr); //打印原数组,map()没有改变原数组 [1, 2, 3, 4, 5];
arr.reduce()
// arr.reduce(callback,[initialValue])
// reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
// callback (执行数组中每个值的函数,包含四个参数)
// 1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
// 2、currentValue (数组中当前被处理的元素)
// 3、index (当前元素在数组中的索引)
// 4、array (调用 reduce 的数组)
// initialValue (作为第一次调用 callback 的第一个参数。)
// (1)简单用法
let arr1 = [1, 2, 3, 4, 5];
//求和
let sum = arr1.reduce((pre, item) => {
return pre + item;
}, 0);
console.log('sum=', sum); //15
//求积
let mul = arr1.reduce((x, y) => {
return x * y;
});
console.log('mul=', mul); //120
// (2)数组中元素出现的次数
let name = [1, 5, 2, 1, 6, 5, 1, 2, 4, 2, 4, 3, 5, 6];
let nameNum = name.reduce((pre, item) => {
if (item in pre) {
pre[item]++;
} else {
pre[item] = 1;
}
return pre;
}, {});
console.log('次数', nameNum); //{1: 3, 2: 3, 3: 1, 4: 2, 5: 3, 6: 2}
// (3)数组去重
let name = [1, 5, 2, 1, 6, 5, 1, 2, 4, 2, 4, 3, 5, 6];
let newArr = name.reduce((pre, item) => {
if (!pre.includes(item)) {
return pre.concat(item);
} else {
return pre;
}
}, []);
console.log('newArr', newArr); //[1,5,2,6,4,3]
arr.entries()
// 获取数组的键值对entries方法
var arr = [1, 2, 3, 4, 5, 6];
for (const [idx, val] of arr.entries()) {
console.log(idx, val);
}
// 打印结果为
// 0 1
// 1 2
// 2 3
// 3 4
// 4 5
// 5 6
arr.find()
// arr.find():查找出第一个符合条件的数组成员,并返回该成员,如果没有找到就返回undefine
// 返回数组中满足提供的测试函数的第一个元素的值,若没有满足测试函数的元素,则返回undefined
// function(必选):在数组的元素上执行的函数,它带有三个参数
// 1、currentValue(必选):元素
// 2、index(可选):元素索引
// 3、arr(可选):数组本身
let a = [
{ name: 'chen', age: 18 },
{ name: 'li', age: 10 },
{ name: 'li', age: 13 },
{ name: 'huang', age: 44 },
{ name: 'zhou', age: 100 }
];
let result = a.find((item) => item.name === 'li');
console.log(result); //返回第一个符合的元素{name:'li',age:10}
arr.concat()
// 合并数组
arr.concat('1',['2','3']) //[1,2,3]