js数组扁平化和常用API以及重构第一部分

js数组扁平化和常用API以及重构第一部分
最新回答
请叫我仙女姐姐

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;}

原理

  1. 遍历数组,检查每个元素是否为数组。
  2. 如果是数组,递归调用flat继续扁平化;否则直接加入结果数组。
  3. 通过concat合并递归返回的一维数组。
三、总结
  • API重构:通过循环和回调函数模拟原生方法,理解其底层逻辑。
  • 扁平化:递归是处理多维数组的核心方法,需注意终止条件(非数组元素)。
  • 扩展性:这些方法可进一步优化(如支持稀疏数组、类数组对象等)。

掌握这些实现有助于深入理解JavaScript数组操作,提升代码灵活性和调试能力。