几种遍历数据方法及性能

forEach()

数组中的每个元素都会通过forEach进行一些改变,会改变原数组。

peoples.forEach(function (people) {
  people.doSomething();
});

map()

数组中的元素通过map进行一些改变后返回一个新数组,新数组中的元素都是原数组中的元素doSomething()后的结果,元素顺序一一对应。(return是必须的)

var newPeoples = peoples.map(function (people) {
  return people.doSomething();
});

以上方法中的回调支持3个参数,value遍历的每一项;index对应的数组索引,array数组本身。

[].forEach/map(function(value, index, array) {});

reduce()

通常用于数组求和,回调必须接收两个参数,简单说就是第一项和第二项相加后的结果再和第三项相加以此类推直到最后一项。

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
  return x + y;
}); // 25

filter()

通常用于过滤,把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素,返回一个过滤后的新数组。

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]

for...in

用于遍历数组下标或者对象的属性(对数组下标或对象的属性进行循环操作)

for...of

用于遍历数组值或者对象的值

for...in / for...of区别演示:

let arr = [3, 5, 7];
arr.foo = "hello";

for (let i in arr) {
console.log(i); // logs "0", "1", "2", "foo"
}

for (let i of arr) {
console.log(i); // logs "3", "5", "7" // 注意这里没有 hello
}

性能方面

只谈性能,显然是 for > forEach > map

map 会返回一个等长数组,forEach 不会,所以 forEach 大于 map。

如果你需要将数组按照某种规则映射为另一个数组,就应该用 map。

如果你需要进行简单的遍历,用 forEach 或者 for of。

如果你需要对迭代器进行遍历,用 for of。

如果你需要过滤出符合条件的项,用 filter。

如果你需要先按照规则映射为新数组,再根据条件过滤,那就用一个 map 加一个 filter。不要担心这样会慢,你那点数据量浏览器根本不 care。

如果你真的需要考虑性能,或者有 break 的需求,就用 for 吧。

原文地址:https://www.cnblogs.com/gr07/p/8445132.html

时间: 2024-11-09 13:40:24

几种遍历数据方法及性能的相关文章

笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)

四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成正比: 前三种算法在平均,最坏情况下都是N2,而且都不需要额外的内存:所以尽管他们的运行时间只相差常数倍,但运行方式不同: 对于已经就序的序列而言,插入排序和冒泡排序的运行时间都是O(N),但是选择排序的时间仍旧是O(N^2): 因为Insertion和Bubble都是相邻项间的比较交换,所以不会出

List 三种遍历的方法

学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码如下: package com.hisense.tiger.list; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class ListTest { public static void main(St

常用的循环遍历数据方法---迭代器模式

咱们在C#项目开发过程中,经常使用foreach的方式来循环遍历某个聚合对象:可能已有很多人遗忘了它的工作原理:今天,我们从这里开始:实际上它是把已经聚集好的一个集合,我们不需要知道其实际的对象类型而循环读取数据:这个地方就用到了我们今天要讲的设计模式---迭代器模式:有兴趣的同学,可以下来了解一下IEumerator 和IEnumerable 接口. 什么是迭代器设计模式?提供一种方法顺序访问聚合对象中的各个元素,并又不暴露其内部表示.  也就是说,我们需要访问一个聚合对象的数据时候.需要对聚

Sql Server中三种字符串合并方法的性能比较

最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.        示例:        有表內容﹕        名称  內容         1     abc        1      aaa        1      dddd        2      1223        2       fkdjfd           --------------------------------        结果﹕        1 

Java_LIST使用方法和四种遍历arrayList方法

1.List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象.   List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为   ArrayList或LinkedList,例如:List<String> l = new ArrayList<String>();// 利用ArrayList类实例化List集合  

一种自动分类数据方法_初探索

知识分享文档, 已替换一些可能敏感的内容 1. 本文由来 当前的防御系统, 已经存储了一定量的基本数据(例如数据a,数据c, 数据c等), 如何利用这些数据,判断不同账户是否正常,是防御的一个重点工作. 本文记录雷健辉的一个探索过程. 2.  首次判断方法 先来看看我们手头上有什么数据(一下数据由等级xx工具统计并生成): 其中: d – 数据a s – 数据b b – 数据c bt – 数据d abn – 数据e spm – 数据f times – 数据g 用人肉判断以上数据: 初步发现, 账

SQL查询遍历数据方法一 [ 临时表 + While循环]

以下以SQL Server 2000中的NorthWind数据库中的Customers表为例, 用 临时表 + While循环 的方法, 对Customers表中的CompanyName列进行遍历 create table #temp(  id int identity(1,1),  customer nvarchar(50)) declare @customer nvarchar(50)declare @n        intdeclare @rows     int select @n=1

ArrayList 集合的几种遍历的方法

ArrayList 集合  也可称作动态数组(长度可变),在新建的时候是没有默认长度的,在新增数据长度小于10的时候,ArrayList 的长度会自动设置为10 //了解更多可以按住Ctrl 再点击你需要查看的方法或者类名,  查看List源代码,ArrayList源代码 public static void main(String[] args) throws Exception {  Arraylist    新增数据时长度是10   当长度为10的时候 增长是如何增长的?  增长因子数位0

数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建数组 //1.快速创建数组@[] NSArray*[email protected][@"month",@"tue",@" wed",@"fir"]; //2,创建空的数组 NSArray*arr=[[NSArray a