2021-10-08 05:38:35
答案:本文详细介绍了JavaScript数组的常用API(如every、some、forEach、filter、map、reduce)及其重构实现,并深入探讨了数组扁平化的原理与代码实现。
一、数组常用API及重构1. every功能:判断数组中是否所有元素满足条件,返回布尔值。示例:
var arr = [1, 2, 5, 7, 9, 99, 19];var res = arr.every(function(item) { return item > 0; }); // true重构:
function every1(arr, fn) { for (var i = 0; i < arr.length; i++) { if (!fn(arr[i], i)) return false; } return true;}2. some功能:判断数组中是否存在至少一个元素满足条件,返回布尔值。示例:
var res = arr.some(function(item) { return item > 3; }); // true重构:
function some1(arr, fn) { for (var i = 0; i < arr.length; i++) { if (fn(arr[i], i)) return true; } return false;}3. forEach功能:遍历数组,无返回值(undefined)。示例:
arr.forEach(function(item, index) { console.log(item, index); });重构:
function forEach1(arr, fn) { for (var i = 0; i < arr.length; i++) { fn(arr[i], i); }}4. filter功能:返回满足条件的新数组。示例:
var res = arr.filter(function(item) { return item > 5; }); // [7, 9, 99, 19]重构:
function filter1(arr, fn) { var res = []; for (var i = 0; i < arr.length; i++) { if (fn(arr[i], i)) res.push(arr[i]); } return res;}5. map功能:对每个元素处理后返回新数组。示例:
var res = arr.map(function(item) { return item + 3; }); // [4, 5, 8, 10, 12, 102, 22]重构:
function map1(arr, fn) { var res = []; for (var i = 0; i < arr.length; i++) { res.push(fn(arr[i], i)); } return res;}6. reduce功能:归并数组(如求和、乘积),可指定初始值。示例:
var res = arr.reduce(function(prev, item) { return prev + item; }); // 143重构:
function reduce1(arr, fn, initValue) { var i = 0; if (initValue === undefined) { initValue = arr[0]; i = 1; } for (; i < arr.length; i++) { initValue = fn(initValue, arr[i], i); } return initValue;}二、数组扁平化功能:将多维数组(如二维)转换为一维数组。示例:
var arr = [1, [2, [3, 4]], 5];// 扁平化后: [1, 2, 3, 4, 5]实现:
function flat(arr) { var newArr = []; for (var i = 0; i < arr.length; i++) { if (arr[i] instanceof Array) { newArr = newArr.concat(flat(arr[i])); // 递归处理子数组 } else { newArr.push(arr[i]); } } return newArr;}原理:
掌握这些实现有助于深入理解JavaScript数组操作,提升代码灵活性和调试能力。