首页 > web前端 > js教程 > JavaScript 数组方法,底层原理(部分)

JavaScript 数组方法,底层原理(部分)

Linda Hamilton
发布: 2025-01-22 02:29:09
原创
551 人浏览过

JavaScript Array Methods, Under the Hood (Part )

本文通过使用 .map() 循环重新创建常见的 JavaScript 数组方法 - .includes().concat().flat()for 来揭秘它们的功能。虽然 for 循环可能看起来效率较低且难以阅读,但了解其底层机制可以让您对内置数组方法有更深入的了解。让我们潜入吧!


.map()

.map() 方法通过将函数应用于现有数组的每个元素来生成新数组。 它仅处理非空元素并保持原始数组不变。

考虑一个银行应用程序需要来自数据结构的客户名称列表。 虽然 .map() 是最有效的解决方案,但让我们看看如何通过 for 循环实现此目的:

<code class="language-javascript">const bankAccounts = [
  {
    id: 1,
    name: "Susan",
    balance: 100.32,
    deposits: [150, 30, 221],
    withdrawals: [110, 70.68, 120],
  },
  { id: 2, name: "Morgan", balance: 1100.0, deposits: [1100] },
  {
    id: 3,
    name: "Joshua",
    balance: 18456.57,
    deposits: [4000, 5000, 6000, 9200, 256.57],
    withdrawals: [1500, 1400, 1500, 1500],
  },
  { id: 4, name: "Candy", balance: 0.0 },
  { id: 5, name: "Phil", balance: 18, deposits: [100, 18], withdrawals: [100] },
];

// Using a 'for' loop:
function getAllClientNamesLoop(array) {
  const acctNames = [];
  for (const acct of array) {
    acctNames.push(acct.name);
  }
  return acctNames;
}

// Using .map():
function getAllClientNamesMap(array) {
  return array.map(acct => acct.name);
}

console.log(getAllClientNamesLoop(bankAccounts)); // Output: ['Susan', 'Morgan', 'Joshua', 'Candy', 'Phil']
console.log(getAllClientNamesMap(bankAccounts)); // Output: ['Susan', 'Morgan', 'Joshua', 'Candy', 'Phil']</code>
登录后复制

for 循环方法需要创建一个空数组并迭代推送名称。 .map() 方法明显更加简洁和可读。

.includes()

此方法检查数组是否包含特定值,返回truefalse

让我们构建一个函数来使用 for 循环和 .includes():

来演示这一点
<code class="language-javascript">// Using a 'for' loop:
function doesArrayIncludeLoop(array, value) {
  let isIncluded = false;
  for (const elem of array) {
    if (elem === value) {
      isIncluded = true;
      break; // Optimization: Exit loop once value is found
    }
  }
  return isIncluded;
}

// Using .includes():
function doesArrayIncludeIncludes(array, value) {
  return array.includes(value);
}

console.log(doesArrayIncludeLoop([1, 1, 2, 3, 5], 6)); // Output: false
console.log(doesArrayIncludeIncludes([1, 1, 2, 3, 5], 3)); // Output: true</code>
登录后复制

for 循环版本初始化一个标志并进行迭代,而 .includes() 提供了直接且更干净的解决方案。

.concat()

此方法将两个或多个数组合并为一个新数组。

这是使用 for 循环和 .concat() 的比较:

<code class="language-javascript">// Using 'for' loops:
function concatArraysLoop(arr1, arr2) {
  const concatenatedArray = [...arr1, ...arr2]; //Spread syntax for conciseness
  return concatenatedArray;
}

// Using .concat():
function concatArraysConcat(arr1, arr2) {
  return arr1.concat(arr2);
}

console.log(concatArraysLoop([0, 1, 2], [5, 6, 7])); // Output: [0, 1, 2, 5, 6, 7]
console.log(concatArraysConcat([0, 1, 2], [5, 6, 7])); // Output: [0, 1, 2, 5, 6, 7]</code>
登录后复制

再次,.concat() 提供了卓越的简洁性和可读性。

.flat()

.flat() 方法将嵌套数组展平为单层数组。 它接受一个可选的深度参数。

让我们使用这两种方法将数组展平一层:

<code class="language-javascript">// Using 'for' loops:
function flatArraysLoop(array) {
  const flattenedArray = [];
  for (const elem of array) {
    if (Array.isArray(elem)) {
      flattenedArray.push(...elem); //Spread syntax
    } else {
      flattenedArray.push(elem);
    }
  }
  return flattenedArray;
}

// Using .flat():
function flatArraysFlat(array) {
  return array.flat();
}

console.log(flatArraysLoop([1, 2, 3, [4, [5, 6]], 10])); // Output: [1, 2, 3, 4, [5, 6], 10]
console.log(flatArraysFlat([1, 2, 3, [4, [5, 6]], 10])); // Output: [1, 2, 3, 4, [5, 6], 10]</code>
登录后复制

使用 for 循环展平更深的嵌套数组变得越来越复杂,突出了 .flat(depth) 的强大功能和简单性。


这个探索展示了 JavaScript 内置数组方法的优雅和高效。 第二部分将深入研究更多数组方法。 请随意分享您的想法和问题! (第二部分的链接将在此处)

以上是JavaScript 数组方法,底层原理(部分)的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
上一篇:在 HTML 中使用
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板