一、基本概念
JavaScript中的数组Aray是一种有序的集合,它可以包含任意类型的数据,包括数字、字符串、对象或函数等。拆分数组指的是将一个大数组按照一定规则,分成若干个小数组。在实际开发中,拆分数组是一个常用的技能,可以有效的帮助我们处理数据。
二、按元素个数拆分
按照元素个数拆分数组是最常用的一种方法,它可以将一个大数组拆成若干个固定大小的小数组。实现这个功能有很多种方法,接下来我们将介绍三种实现方法。
1. splice()方法
const arr = [1, 2, 3, 4, 5];
const size = 2;
const result = [];
while (arr.length) {
result.push(arr.splice(0, size));
}
console.log(result); // [[1, 2], [3, 4], [5]]
这个方法每次截取前面的size个元素,将它们推入result数组中,同时从原数组中删除这些元素。这个过程循环执行,直到原数组为空为止。
2. reduce()方法
const arr = [1, 2, 3, 4, 5];
const size = 2;
const result = arr.reduce((acc, val, i) => {
const idx = Math.floor(i / size);
const page = acc[idx] || (acc[idx] = []);
page.push(val);
return acc;
}, []);
console.log(result); // [[1, 2], [3, 4], [5]]
这个方法使用reduce()函数,将原数组逐个遍历,并根据元素在原数组中的索引,计算出当前元素应该被推入哪个小数组中。如果当前位置没有小数组,则创造一个新的小数组,并将当前元素推入其中。
3. slice()方法
const arr = [1, 2, 3, 4, 5];
const size = 2;
const result = [];
for (let i = 0; i < arr.length; i += size) {
const slice = arr.slice(i, i + size);
result.push(slice);
}
console.log(result); // [[1, 2], [3, 4], [5]]
这个方法使用了for循环和slice()函数,每次从原数组中取出size个元素,并将它们推入result数组中。
三、按特定条件拆分
除了按照元素个数拆分以外,我们还可以根据需求将数组按照其他条件进行拆分。
1. 根据奇偶性拆分
const arr = [1, 2, 3, 4, 5];
const evens = [];
const odds = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
evens.push(arr[i]);
} else {
odds.push(arr[i]);
}
}
console.log(evens); // [2, 4]
console.log(odds); // [1, 3, 5]
这个例子将原数组按照奇偶性拆分成了两个小数组。它使用常规的for循环遍历原数组,根据元素是否为偶数,将元素推入evens或odds数组中。
2. 根据值的范围拆分
const arr = [1, 4, 6, 8, 10];
const small = [];
const medium = [];
const large = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < 5) {
small.push(arr[i]);
} else if (arr[i] < 9) {
medium.push(arr[i]);
} else {
large.push(arr[i]);
}
}
console.log(small); // [1, 4]
console.log(medium); // [6, 8]
console.log(large); // [10]
这个例子将原数组按照值的大小拆分成了三个小数组。它使用常规的for循环遍历原数组,根据元素值的大小,将元素推入small、medium或large数组中。
3. 根据字符串关键词拆分
const arr = ['apple', 'orange', 'mango', 'banana'];
const startsWithO = [];
const containsN = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i].startsWith('o')) {
startsWithO.push(arr[i]);
}
if (arr[i].includes('n')) {
containsN.push(arr[i]);
}
}
console.log(startsWithO); // ['orange']
console.log(containsN); // ['orange', 'mango', 'banana']
这个例子将原数组按照字符串关键词拆分成了两个小数组。它使用常规的for循环遍历原数组,根据元素的字符串形式包含特定的关键词,将元素推入startsWithO或containsN数组中。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/257448.html