日常开发中,如果熟悉一般的数组处理方法,常能事半功倍,有更多时间学习其他技术,形成正向循环。
这里总结常用的js数组处理方法。
遍历查找
Array.filter() 过滤
- 返回新数组,不改变原数组
- 不检查空数组
let holidays = [1, 3, 5, 7];
getSmaller = (item) => item > 3;
holidays.filter(getSmaller);
// [5, 7]
Array.every()
- 返回 boolean
- every() 方法用于检测数组所有元素是否都符合指定条件
- every() 方法使用指定函数检测数组中的所有元素
- every() 不会改变原始数组。
let holidays = [1, 3, 5, 7];
biggerThan3 = (item) => item > 3;
holidays.every(biggerThan3);
// false
Array.find()
const peoples = [
{
name: 'jane',
age: 23
},
{
name: 'dannel',
age: 43
},
{
name: 'bruce',
age: 56
}
];
findJane = (item) => item.name === 'jane';
const Jane = peoples.find(findJane)
// {name: "jane", age: 23}
- find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。
- find() 方法为数组中的每个元素都调用一次函数执行:
当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。如果没有符合条件的元素返回 undefined
- 注意: find() 对于空数组,函数是不会执行的。
- 注意: find() 并没有改变数组的原始值。
求和排序
Array.reduce() 求和
- reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
const numbers = [1, 2, 3, 4, 5, 6];
getSum = (total, curValue) => total + curValue
const sum = numbers.reduce(getSum)
// 21
Array.reduceRight()
与reduce() 类似
const sum = [0, 1, 2, 3].reduceRight((a, b) => a + b);
// sum is 6
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
return a.concat(b);
});
// flattened is [4, 5, 2, 3, 0, 1]
reduce与reduceRight区别
var a = ['1', '2', '3', '4', '5'];
var left = a.reduce((sum, cur) => sum + cur);
var right = a.reduceRight((sum, cur) => sum + cur);
console.log(left); // "12345"
console.log(right); // "54321"
Array.sort()
Array.sort()会将数组的数值转化成字符串,然后根据UTF-16 code 比较大小
var months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// ["Dec", "Feb", "Jan", "March"]
var array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// [1, 100000, 21, 30, 4]
如果想要对数组降序、升序排序,就需要变通一点。原理:
function compare(a, b) {
if (a 大于 b) { // a、b的类型可以是任意的,比较规则自己定义
return -1;
}
if (a 小于 b) {
return 1;
}
// a 等于 b
return 0;
}
例如,1、如果是数字数组:
let numbers = [2, 31, 34, 1, 9];
numbers.sort(function(a, b) {
return a - b;
})
使用箭头函数,可以使代码更加简洁:
let numbers = [2, 31, 34, 1, 9];
numbers.sort((a, b) => a - b)
2、数组对象
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 13 },
{ name: 'Zeros', value: 37 }
];
// 根据value排序
items.sort(function (a, b) {
return a.value - b.value;
});
// 根据name排序
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // 去除大小写的影响
var nameB = b.name.toUpperCase(); // 去除大小写的影响
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
判断
includes() 判断存在
- includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。