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日

相关文章

  • Nodejs多站点切换Htpps协议详解及简单实例

    关于”Nodejs多站点切换Htpps协议详解及简单实例” 的攻略,我将按照以下内容来进行讲解: 什么是HTTP和HTTPS协议 Nodejs多站点切换HTTPS协议的实现方法 示例说明 1. 什么是HTTP和HTTPS协议 HTTP(HyperText Transfer Protocol,超文本传输协议) 和 HTTPS (HTTP Secure)协议是在…

    node js 2023年6月8日
    00
  • Node中的streams流的具体使用

    使用 Node.js 的 streams(流)是一种有效处理数据的方式。它们基于 EventEmitter API,因此可以轻松实现任意类型的自定义流和链式流水线。 1. 什么是流? 流是 Node.js 提供的处理流式数据的抽象接口。它们可以用于读取文件,处理 HTTP 请求,压缩和解压缩数据,以及许多其他用途。 流是可读的、可写的或可读可写的。数据能够按…

    node js 2023年6月8日
    00
  • 手把手教你如何使用nodejs编写cli命令行

    关于“手把手教你如何使用Node.js编写CLI命令行”的攻略,我会详细讲解以下步骤: 步骤一:创建一个node项目 首先,我们需要在本地环境上创建一个 Node.js 项目,以便于后续的操作: mkdir my-cli cd my-cli npm init -y 执行完上述命令后,会在当前目录下创建一个名为 my-cli 的文件夹,并在该目录下生成一个 p…

    node js 2023年6月8日
    00
  • 2014年最火的Node.JS后端框架推荐

    2014年最火的Node.JS后端框架推荐 Node.js是一个服务器端JavaScript环境,它以高效的事件驱动和非阻塞I / O模型而闻名,在现代Web应用程序开发中越来越受欢迎。但是,Node.js本身只是一个运行时环境,它需要框架来简化Web应用程序开发。在 2014年,以下是一些最流行的Node.js后端框架: 1. Express Expres…

    node js 2023年6月7日
    00
  • 轻松创建nodejs服务器(4):路由

    以下是“轻松创建nodejs服务器(4):路由”的详细攻略。 步骤1:创建路由函数 在Node.js中,路由就是指对于请求的URL进行处理的函数,所以第一步就是创建路由函数。这里我们可以使用一个简单的JavaScript对象来管理路由: var routes = { "/": function(request, response) { r…

    node js 2023年6月8日
    00
  • 深入理解Node中的buffer模块

    深入理解Node中的Buffer模块 什么是Buffer? 在Node.js中,Buffer是一种全局对象,用于处理二进制数据。它类似于数组,但可以存储字节,每个字节对应一个0-255范围内的整数。Buffer对象可以通过多种方式创建,包括使用字符串、数组、整数和其他Buffer对象等。 最常用的创建方式是通过字符串,例如: const str = ‘hel…

    node js 2023年6月8日
    00
  • Nodejs实现用户注册功能

    下面是Nodejs实现用户注册功能的完整攻略: 1. 创建注册页面 首先需要创建一个注册页面,可以使用HTML、CSS、JavaScript创建。在HTML表单中包含用户名、密码、邮箱等输入框,以及提交按钮等元素。这里举一个HTML页面创建代码的例子: <!DOCTYPE html> <html> <head> <t…

    node js 2023年6月8日
    00
  • js获取html页面节点方法(递归方式)

    当我们需要获取页面内的某个节点时,我们可以使用JavaScript对DOM树进行遍历,找到目标节点并返回。递归是一种逐级下降的方式,在DOM树上寻找目标节点。下面是详细的攻略: 核心思路 判断当前节点是否是目标节点,是的话则返回该节点 不是目标节点则遍历该节点的所有子节点,并依次调用自己,直到找到目标节点或子节点均为null时停止递归。 代码实现 funct…

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