1. 改变原数组
1.1 splice()
- 改变原数组。通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
- 返回值:删除的数组元素,若没有删除则返回空数组;删除一个,则返回一个数组元素的数组
1.1.1 删除
array.splice(start, deleteCount)
- start,数组的索引,0开始
- deleteCount,删除元素个数,[可选]
- 如果
deleteCount大于等于start之后的元素的总数或者直接省略deleteCount,则从start后面的元素都将被删除(含第start位)。 - 如果
deleteCount是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。
const arr1 = ref([
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
])
arr1.value.splice(0) // 直接省略`deleteCount`
console.log('deleteCount', arr1.value) // 这里返回空数组
arr1.value.splice(0, 4) // deleteCount大于start之后的元素的总数
console.log('deleteCount', arr1.value) // 这里返回空数组
// 这里通过findIndex方法找到 item.count === 1 对应的索引
// 注意: indIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。
const someDelete = arr1.value.findIndex(item =>
item.count === 1
)
console.log('someDelete', someDelete)
const newArr1 = arr1.value.splice(someDelete, 1)
console.log('newArr1', newArr1)
// 返回删掉的那条/些数据
// {count: 1, userInfo: '第一层信息', context: 'a'}
console.log('arr1', arr1.value)
// 返回删除之后剩下的数据
// [{count: 2, userInfo: '第一层信息', context: 'v'},
// {count: 3, userInfo: '第一层信息', context: 'd'}]
1.1.2 添加
array.splice(start, deleteCount,[item1, item2...])
- item1, item2... 要添加进数组的元素,从
start位置开始。如果不指定,则splice()将只删除数组元素。[可选]
// 添加
const arr2 = ref([
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
])
// 从索引为1的位置开始删除0个元素,插入一条新的数组元素
const newArr2 = arr2.value.splice(1, 0, {
count: 666, userInfo: '第一层信息', context: 'd'
})
console.log('newArr2', newArr2) // 返回空数组,没有删除数组元素
console.log('arr2', arr2.value)
// 打印:arr2
[
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 666, userInfo: '第一层信息', context: 'd'},
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
]
1.1.3 替换
array.splice(start, deleteCount,[item1, item2...])
- 原理同上面的”添加“,当deleteCount的值 = [item1, item2...]的个数时
// 替换
const arr3 = ref([
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
])
const newArr3 = arr3.value.splice(1, 2,
{count: 88, userInfo: '第一层信息', context: 'v'},
{count: 77, userInfo: '第一层信息', context: 'd'}
)
console.log('newArr3', newArr3)
// 打印newArr3删除的数组元素:
[
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
]
console.log('arr3', arr3.value)
// 打印arr3:替换之后的数据
[
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 88, userInfo: '第一层信息', context: 'v'},
{count: 77, userInfo: '第一层信息', context: 'd'}
]
1.2 push()
- 将一个或多个元素添加到数组的末尾,并返回该数组的新长度
- 语法:
arr.push(element1, ..., elementN)
const arr1 = ref([1, 2, 3])
const a1 = arr1.value.push('a')
console.log('arr1', arr1.value) // [1, 2, 3, 'a']
console.log('a1', a1) // 返回数组长度 4
1.3 pop()
- 从数组中删除最后一个元素,并返回该元素的值
- 语法:
arr.pop() - 返回值:从数组中删除的元素(当数组为空时返回
undefined)
const arr2 = ref(['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'])
const a2 = arr2.value.pop()
console.log('arr2', arr2.value) // ['broccoli', 'cauliflower', 'cabbage', 'kale']
console.log('a2', a2) // 返回删除的数组中最后一个数组元素
1.4 unshift()
- 将一个或多个元素添加到数组的开头,并返回该数组的新长度
- 语法:
arr.unshift(element1, ..., elementN) - 返回值:返回新数组的长度
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
// expected output: 5
console.log(array1);
// expected output: Array [4, 5, 1, 2, 3]
1.5 shift()
- 从数组中删除第一个元素,并返回该元素的值
- 语法:
arr.shift() - 返回值:删除的数组元素,如果数组为空则返回
undefined
const array1 = [1, 2, 3];
const firstElement = array1.shift();
console.log(array1);
// expected output: Array [2, 3]
console.log(firstElement);
// expected output: 1
1.6 fill()
- 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素
- 不包括终止索引
- 语法:
arr.fill(value[, start[, end]])
其中value:用来填充数组元素的值;start:开始索引;end:结束索引 - 返回值:修改后的数组
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
const tableArr = new Array(20).fill('').map(item => {
return {
'branch': '部门1',
'marginMaturityYears': '2016',
'marginMaturityMonth': '6月',
'amountLocalCurrency': '2300.23'
}
})
1.7 reverse()
reverse方法反转数组中元素的位置,改变了数组,并返回该数组的引用。- 返回值:原始数组反转后的引用
const array1 = ['one', 'two', 'three'];
console.log('array1:', array1);
// "array1:" Array ["one", "two", "three"]
const reversed = array1.reverse();
console.log('reversed:', reversed);
// "reversed:" Array ["three", "two", "one"]
// Careful: reverse is destructive -- it changes the original array.
console.log('array1:', array1);
// "array1:" Array ["three", "two", "one"]
2. 不改变原数组
2.1 concat()
- 用于合并两个或多个数组, 返回一个新数组
- 语法:
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]]) - 返回值:新的
Array实例。如果省略了所有valueN参数,则concat会返回调用此方法的现存数组的一个浅拷贝。
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"]
var alpha = ['a', 'b', 'c'];
var numeric = [1, 2, 3];
alpha.concat(numeric);
// result in ['a', 'b', 'c', 1, 2, 3]
var alpha = ['a', 'b', 'c'];
var alphaNumeric = alpha.concat(1, [2, 3]);
// var alphaNumeric = alpha.concat(1, 2, 3);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
2.2 some() 检测数组元素中是否有元素符合指定条件
// 检查数组中是否有 大于8的元素,有的话,返回true
const arr = [9, 7, 5, 4]
const checkArray = (item) => {
return item > 8
}
const res = arr.some(checkArray)
console.log('res', res) // true
语法:
array.some(function(currentValue,index,arr),thisValue)
参数:currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象
some() 方法会依次执行数组的每个元素:
- 如果有一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
注意:some() 不会对空数组进行检测。
注意:some() 不会改变原始数组。
2.3 every() 检测数组元素的每个元素是否都符合条件
// 检查数组元素是否都大于8,有的话,返回true
const arr = [9, 7, 5, 4]
const checkArray = (item) => {
return item > 8
}
const resData = arr.every(checkArray)
console.log('resData', resData) // false
语法:
array.every(function(currentValue,index,arr),thisValue)
参数:currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 *false* ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
注意:every() 不会对空数组进行检测。
注意:every() 不会改变原始数组。
2.4 filter 数组过滤
不改变原数组,创建一个新数组
const arr = ref([
{count: 1, userInfo: '第一层信息', context: 'a'},
{count: 2, userInfo: '第一层信息', context: 'v'},
{count: 3, userInfo: '第一层信息', context: 'd'}
])
const newArr = arr.value.filter(item =>
item.count > 1
)
console.log('arr', arr.value) // 这里是原数组
console.log('newArr', newArr) // 这里是满足 item.count > 1 的数组元素
// 控制台输出 newArr:
// [
// {count: 2, userInfo: '第一层信息', context: 'v'},
// {count: 3, userInfo: '第一层信息', context: 'd'}
// ]
2.5 find()
- 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回
undefined
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
2.6 map()
- 不改变原数组
- map() 不会对空数组进行检测
const mapData = [
['广东', 32],
['江苏', 40],
['四川省', 37],
]
const newArr = mapData.map(item => {
return {
name: item[0],
value: item[1]
}
})
console.log('mapDatas', mapDatas)
// [["广东",32],["江苏",40],["四川省",37]]
console.log('newArr', newArr)
// [{"name":"广东","value":32},{"name":"江苏","value":40},{"name":"四川省","value":37}]
2.7 slice()
slice() 方法返回一个新的数组对象,这一对象是一个由 start 和 end 决定的原数组的浅拷贝(包括 start,不包括 end),其中 start 和 end 代表了数组元素的索引。原始数组不会被改变。
语法:
slice()
slice(start)
slice(start, end)
// start:提取开始的位置【可选】
// end:提取结束的位置,不包含结束位置的数组元素【可选】
2.7.1 提取所有数组元素
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
const citrus = fruits.slice(); // ["Banana", "Orange", "Lemon", "Apple", "Mango"]
const res = fruits.slice(0); // ["Banana", "Orange", "Lemon", "Apple", "Mango"]
2.7.2 提取部分数组元素
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
const citrus = fruits.slice(1, 3);
// fruits 包含 ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus 包含 ['Orange','Lemon']