Js中forEach修改原数组与sort排序经典场景详解

Js中forEach修改原数组与sort排序经典场景详解

在Js开发中,forEach和sort是常用的数组方法。然而,在使用这两个方法的时候,有一些需要注意的事项。本文将重点讲解forEach和sort两个方法在修改原数组和排序时的经典场景。

1. forEach修改原数组

1.1 forEach函数原理

forEach是一种迭代数组元素的方法,可以通过回调函数对数组元素进行处理。forEach传递3个参数给回调函数:当前元素的值,当前元素在数组中的索引,以及forEach方法被调用的数组。

array.forEach(function(currentValue,index,arr), thisValue)

其中,第一个参数currentValue是必须的,表示当前元素的值。index和arr可选。thisValue是可选的,在执行回调函数时可用作this的值。

1.2 forEach修改原数组方法

在使用forEach方法时,需注意forEach方法不能修改原数组中的元素。以下示例中,现有一个数组arr,要求将其中的元素都乘以2,再将结果输出。

const arr = [1, 2, 3, 4];

arr.forEach(function (item) {
    item = item * 2;
    console.log(item);
});

console.log(arr); // [1, 2, 3, 4]

结果输出如下:

2
4
6
8
[1, 2, 3, 4]

可以看到,即使在回调函数中将元素乘以2,最终的结果并没有改变。因为在使用forEach时,是将每个元素复制一份后,将复制品作为回调函数的参数传递的。因此,对原数组的修改并不会影响原数组本身。

1.3 forEach修改原数组的解决方案

要修改原数组中的元素,可以尝试使用for循环或map方法。

1.3.1 for循环

使用for循环遍历数组,对每个元素执行修改操作。

for (let i = 0; i < arr.length; i++) {
    arr[i] = arr[i] * 2;
}

1.3.2 map方法

使用map方法对原数组进行映射,得到一个新的数组。需要注意的是,map方法并不会修改原数组,而是返回一个新的数组。

const newArr = arr.map(function (item) {
    return item * 2;
});

2. sort排序

2.1 sort函数原理

sort方法是一种对数组元素进行排序的方法。sort方法的原理是采用数组排序算法来重新排序数组。有两种方式来使用sort方法进行数组排序:自然排序和自定义排序。

自然排序:将数组元素按照字符编码点 Unicode值来进行排序。

const arr = [3, 1, 4, 2];
arr.sort();
console.log(arr); // [1, 2, 3, 4]

自定义排序:传递一个函数作为参数,该函数将决定如何对数组进行排序。

const arr = ['hello', 'world', 'good', 'morning', 'afternoon'];
arr.sort(function (a, b) {
    if (a.length > b.length) {
        return 1;
    } else if (a.length < b.length) {
        return -1;
    } else {
        return 0;
    }
});

console.log(arr); // [ 'good', 'hello', 'world', 'afternoon', 'morning' ]

2.2 sort修改原数组

需要注意的是,sort方法会改变原数组,而不是返回一个新的数组。以下示例中,现有一个数组arr,要求将其中的元素按降序排列。

const arr = [3, 1, 4, 2];

arr.sort(function (a, b) {
    return b - a;
});

console.log(arr); // [4, 3, 2, 1]

在调用sort方法后,原数组arr的元素顺序已经被改变,从前往后依次为4, 3, 2, 1。

2.3 sort排序的解决方案

若需排序而不改变原数组,则可以使用slice方法创建一个新的数组副本,再对其进行排序。

const arr = [3, 1, 4, 2];
const newArr = arr.slice();

newArr.sort(function (a, b) {
    return b - a;
});

console.log(newArr); // [4, 3, 2, 1]
console.log(arr);    // [3, 1, 4, 2]

3. 总结

本文主要介绍了forEach和sort方法在修改原数组和排序时的注意事项和解决方案。在使用forEach使用时,可使用for循环或map方法修改原数组,而在使用sort方法时,需要注意sort方法会改变原数组,如果不想修改原数组,则需使用slice方法创建一个新的数组副本。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Js中forEach修改原数组与sort排序经典场景详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Vue全局loading及错误提示的思路与实现

    本文将详细讲解如何通过Vue全局loading及错误提示来提供良好的用户体验。该方案可用于任何基于Vue构建的项目,并且易于扩展。 需求分析 在处理异步请求时,用户需要了解操作的进展情况和任何错误信息。此时,全局loading和错误提示成为必要功能。解决方案需要解决以下需求: 可在应用程序中的所有组件中使用loading和错误提示。 loading和错误提示…

    node js 2023年6月8日
    00
  • node.js中的http.response.setHeader方法使用说明

    下面是关于node.js中http.response.setHeader方法的使用说明。 http.response.setHeader方法简介 在node.js中,http.response.setHeader是一个很常用的方法。该方法主要用来设置HTTP响应头的值。在向客户端发送HTTP响应之前,我们通常会通过该方法来设置HTTP响应的各种参数,如响应的…

    node js 2023年6月8日
    00
  • Nodejs新特性async和await的使用详解

    下面我就为您详细讲解“Nodejs新特性async和await的使用详解”的完整攻略。 一、async和await的基本概念 async和await是ES2017标准中的特性,用于简化异步编程的操作。在Node.js中,我们可以使用async/await来处理异步操作。 async用于修饰函数,表示该函数是一个异步函数,返回的是一个Promise对象。 aw…

    node js 2023年6月8日
    00
  • Express 框架中使用 EJS 模板引擎并结合 silly-datetime 库进行日期格式化的实现方法 原创

    下面是如何在 Express 框架中使用 EJS 模板引擎并结合 silly-datetime 库进行日期格式化的实现方法,分为以下两个步骤: 步骤一:安装和配置 1. 安装 Express 和 EJS 在项目根目录中运行以下命令来安装 Express 和 EJS: npm install express ejs –save 2. 安装 silly-dat…

    node js 2023年6月8日
    00
  • 3分钟快速搭建nodejs本地服务器方法运行测试html/js

    以下是关于“3分钟快速搭建nodejs本地服务器方法运行测试html/js”的完整攻略: 步骤一:安装Node.js 首先需要在本地电脑上安装Node.js环境,以便能够在本地创建和运行Node.js服务器。可以前往Node.js官方网站进行下载和安装。 步骤二:在本地创建项目文件夹并初始化项目 在本地新建一个空白文件夹作为项目文件夹,在命令行中进入该文件夹…

    node js 2023年6月8日
    00
  • Node.js中的events事件模块知识点总结

    Node.js中的events事件模块知识点总结 什么是事件? 事件是Node.js中的一种机制,用于处理异步操作。当某个任务完成时,会触发一个事件,并调用相应的事件处理函数进行处理。Node.js的事件机制基于观察者模式(Observer Pattern),主要由 事件触发器(EventEmitter) 和 事件监听器(EventListener) 两部分…

    node js 2023年6月8日
    00
  • nodejs 简单实现动态html的方法

    下面是关于“nodejs 简单实现动态html的方法”的完整攻略。 1. 什么是动态HTML HTML页面一般是静态的,也就是说一旦我们将一个HTML页面上线后,我们就不能够在服务器上改变页面内容了。但是有时候,我们需要让页面内容发生变化,比如向页面中添加实时数据或直接从数据库中获取数据并将其显示在页面上。这时候,我们需要用到动态HTML技术让页面内容实时地…

    node js 2023年6月8日
    00
  • 浅析Node.js中使用依赖注入的相关问题及解决方法

    浅析Node.js中使用依赖注入的相关问题及解决方法 什么是依赖注入 依赖注入是一种设计模式,用于解决代码中依赖关系的耦合问题。通常情况下,我们在编写代码时往往会使用全局变量、单例等方式来传递对象,这样一来,当我们修改其中一个依赖时,就会对整个系统产生影响。而依赖注入则是通过将依赖的对象从外部注入到需要使用的地方,从而降低依赖关系的耦合性,使得代码更加灵活、…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部