数组操作有什么作用?

数组操作有什么作用?


1.背景介绍


JavaScript的array可以包含任意数据类型,并通过索引来访问每个元素。
filter()、some()、map()、forEach()是 ECMAScript5为数组定义的4个迭代方法,是为了更方便的对数组进行操作。

2.知识剖析


map() 方法创建一个新数组,其结果是该数组中的每个元素调用一个提供的函数。

map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值(包括 undefined)组合起来形成一个新数组。MDN



let numbers = [1, 5, 10, 15];
let roots = numbers.map(function(x) {
return x * 2;
});
// roots is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]

let numbers = [1, 4, 9];
// let roots = numbers.map(Math.sqrt);
let roots = numbers.map(function(x){
return Math.sqrt(x);
});
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]

some() 方法测试数组中的某些元素是否通过了指定函数的测试。

some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some
返回 false。MDN



function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true

filter() 方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组。

filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值 的元素创建一个新数组。


filter 不会改变原数组MDN


function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

forEach() 方法对数组的每个元素执行一次提供的函数。

forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除(使用delete方法等情况)或者未初始化的项将被跳过(但不包括那些值为 undefined 的项)。MDN


forEach()方法中的 callback 回调函数默认支持 3 个参数,第 1 个是遍历的数组元素、第2个是元素对应的索引、第3个是数组本身。



function logArrayElements(element, index, array) {
console.log("a[" + index + "] = " + element);
}

// 注意索引2被跳过了,因为在数组的这个位置没有项
[2, 5, ,9].forEach(logArrayElements);

// a[0] = 2
// a[1] = 5
// a[3] = 9

[2, 5,"" ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] =
// a[3] = 9

[2, 5, undefined ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = undefined
// a[3] = 9

let xxx;
// undefined

[2, 5, xxx ,9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = undefined
// a[3] = 9

3.常见问题


数组操作的不同之处

map() 创建一个新数组,每个元素都是函数执行后的结果。原数组不变。


some() 根据调用函数返回 true 或 false。原数组不改变。


filter() 创建一个新数组,数组是满足函数的元素集合。不会改变原数组。


forEach() forEach()仅仅遍历数组每个元素执行一次 callback 函数,它没有返回内容。这一点和map()方法、some()方法、every()方法不同。如果打印forEach()方法返回内容,会出现undefined。不会改变原内容

4.解决方案


5.编码实战


6.扩展思考


filter()、some()、map()、forEach()的共同点是什么?

7.参考文献


参考:MDN


8.更多讨论


还有哪些方法可以对数组进行操作?


every() 方法测试数组的所有元素是否都通过了指定函数的测试。


MDN


reduce() 方法对累加器和数组的每个值 (从左到右)应用一个函数,以将其减少为单个值。


MDN

你可能感兴趣的:(数组操作有什么作用?)