一、Array.from()
方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例。
将类数组对象转换为真正数组,
将Set结构的数据转换为真正的数组
console.log(Array.from('foo'))
const arr = [1,2,3]
console.log(arr)
console.log(Array.from((arr), x => x + x))
console.log(arr)
Array.from()方法可以将ES6-Set结构转为数组,这就提供了去除数组重复成员的另一种方法。
//数组去重并合并
function combine() {
let arr = [].concat.apply([], arguments); //没有去重复的新数组
return Array.from(new Set(arr));
}
var a = [1,1,2,2], b=[2,2,3,3]
combine(a,b)
二、Array.prototype.concat()
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
concat方法不会改变this或任何作为参数提供的数组,而是返回一个浅拷贝。
var array1 = ['a', 'b', 'c'];
var array2 = ['d', 'e', 'f'];
console.log(array1)
console.log(array2)
console.log(array1.concat(array2));
//concat将对象引用复制到新数组中。
//原始数组和新数组都引用相同的对象。
//如果引用的对象被修改,则更改对于新数组和原始数组都是可见的。
array1[2] = 'ccc'
console.log(array1)
console.log(array1.concat(array2))
Array.prototype.every()
every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
不会改变原数组。
若收到一个空数组,此方法在一切情况下都会返回 true。
function isBelowThreshold(currentValue) {
//array1[10] = 50
return currentValue < 40;
}
var array1 = [1, 30, 39, 29, 10, 13];
console.log(array1)
console.log(array1.every(isBelowThreshold));
//console.log(array1)
//every 遍历的元素范围在第一次调用 callback 之前就已确定了。
//后边添加或删除的元素是不会被callback访问到的
Array.prototype.filter()
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
filter不会改变原数组,它返回过滤后的新数组,没有元素通过则返回空数组
function fn(currentValue) {
//array1[6] = 50
return currentValue.length < 2;
}
var array1 = ["1", "8", "39", "29", "189", "13"];
console.log(array1)
console.log(array1.filter(fn));
console.log(array1)
//every 遍历的元素范围在第一次调用 callback 之前就已确定了。
//后边添加或删除的元素是不会被callback访问到的
Array.prototype.find()
find()` 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined
find方法不会改变数组。
var array1 = [5, 12, 8, 130, 44];
var found = array1.find(function(element) {
return element > 10;
});
console.log(found);
Array.prototype.forEach()
forEach实现数组元素的遍历,不改变原数组
Array.prototype.map()
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
//不改变原数组本身
var array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1);
console.log(array1)
map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)
var array1 = [1, 4, 9, 16];
array1.map((x,index,arr) => {
arr[index] = 5
});
console.log(array1)
Array.prototype.pop()
.pop()方法从数组中删除最后一个元素,并返回该元素的值。改变原数组
var plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop());
console.log(plants);
Array.prototype.push()
push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。改变原数组
var animals = ['pigs', 'goats', 'sheep'];
console.log(animals.push('cows'));
console.log(animals);
Array.prototype.shift()
shift() 方法从数组中删除第一个元素,并返回该元素的值。改变原数组
var array1 = [1, 2, 3];
console.log(array1.shift())
console.log(array1)
Array.prototype.unshift()
unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(修改原有数组)。
var array1 = [1, 2, 3];
console.log(array1.unshift(22)); //返回数组的长度
console.log(array1.unshift(22,66,77)); //添加多个
console.log(array1);
Array.prototype.slice()
slice() 方法提取指定起始位到结束位之间的元素(不包括end),并返回一个新的数组对象,原始数组不会被改变。
接受两个参数(start,end),一个参数时,默认提取指定开始位到最后一位
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
var arr2 = animals.slice(1,3)
//var arr2 = animals.slice(1)
console.log(animals)
//如果向两个数组任一中添加了新元素,则另一个不会受到影响
var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
var arr2 = animals.slice(1,3)
console.log(animals)
console.log(arr2)
//animals.push('i love you')
//arr2.push('i no')
//console.log(animals)
//console.log(arr2)
Array.prototype.splice()
splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
var arr = [1,2,3,4,5,6]
console.log(arr)
//arr.splice(1,2) //下标从1开始,截取掉2个(2是个数)
//arr.splice(2) //下标从2开始,后边的所有
//arr.splice(1,5,7,8) //下边从1开始,截取掉5个 ,并添加 7 和 8 两个
console.log(arr)
Array.prototype.reverse()
reverse() 方法将数组中元素的位置颠倒,并返回该数组。改变原数组。
var arr = [1,2,3]
console.log(arr)
arr.reverse()
console.log(arr)
网友评论