ES6数组新增方法forEach、map、filter、find、every、some、reduce的用法

本文介绍了ES6语法及支持的浏览器版本,还可通过babel转意支持低版本。详细讲解了ES6新增的数组方法,如forEach用于循环、map映射成新数组、filter过滤数组、find查找符合要求对象等,并给出了各方法的使用案例,如求和、属性提取等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*ES6语法:

Opera 11+ 

Firefox 3.6+   

Safari 5+   

Chrome 8+

Internet Explorer 9+支持。可以通过babel转意支持低版本浏览器。

 

forEach()

ES6新增的一种循环

案例1打印数组中所有对象

numbers=[1,2,3,4,5]
numbers.forEach(number => {
    console.log(number)  //1 2 3 4 5
});

案例2将数组中所有数字相加(这里用了函数抽离的方式)

numbers=[1,2,3,4,5]
var sum=0
function add(num){   
    sum+=num
}
numbers.forEach(add)
console.log(sum)    //15

 

map()

原数组被“映射”成对应新数组,返回一个新数组

案例1将原数组的每个数字都*2

var numbers=[1,2,3,4,5]
var doublnumbers=numbers.map(number=>{
    return number*2
})
console.log(doublnumbers)  //[2,4,6,8,10]

案例2将A对象数组中某个属性存到B数组中

var building=[
    {name:'the Great Wall',location:'BeiJing'},
    {name:'Eiffel Tower',location:'Paris '}
]
var citys=building.map(item=>{
    return item.location
})
console.log(citys)  //["BeiJing", "Paris "]

 

filter()

filter为“过滤”。数组filter后,返回过滤后的新数组

案例1假定有一个对象数组A,获取数组中指定类型的对象放到B数组中

var products = [
    {name:"cucumber",type:"vegetable"},
    {name:"banana",type:"fruit"},
    {name:"celery",type:"vegetable"},
    {name:"orange",type:"fruit"}
  ]; 
  var filtered = products.filter((product)=>{
    return product.type === "vegetable";
  })
  console.log(filtered)  //[{name:"cucumber",type:"vegetable"},{name:"celery",type:"vegetable"}]

案例2假定有两个数组(A,B),根据A中id值,过滤掉B数组不等于A中id的数据

var post = {id:4,title:"Javascript"};
var comments = [
    {postId:4,content:"Angular4"},
    {postId:2,content:"Vue.js"},
    {postId:3,content:"Node.js"},
    {postId:4,content:"React.js"}   
 ];
 function commentsForPost(post,comments){
    return comments.filter(function(comment){
      return comment.postId === post.id;
    })
 }

 console.log(commentsForPost(post,comments));  //[ {postId:4,content:"Angular4"},{postId:4,content:"React.js"}]

 

find()

在数组中找到符合要求的对象 和filter的区别就是找到符合要求的对象就停止寻找了,返回的是一个对象,而filter返回的是所有符合要求的对象组成的新数组

案例1假定有一个对象数组(A),找到符合条件的对象

var users = [
    {name:"Jill",id:1},
    {name:"Alex",id:2},
    {name:"Bill",id:3},
    {name:"Alex",id:4}
   ];
   user = users.find(function(user){
    return user.name === "Alex";
  })
 console.log(user); //{name: "Alex", id: 2}

案例2假定有两个数组(A,B),根据A中id值,找到B数组等于A中id的数据

var post = {id:4,title:"Javascript"};
 var comments = [
    {postId:4,content:"Angular4"},
    {postId:2,content:"Vue.js"},
    {postId:3,content:"Node.js"},
    {postId:4,content:"React.js"}   
 ];
 function commentsForPost(post,comments){
    return comments.find(function(comment){
      return comment.postId === post.id;
    })
 }

 console.log(commentsForPost(post,comments));  // {postId:4,content:"Angular4"}
 

 

every()  some()

every 若目标数组中每一个对象都符合条件则返回true,否则返回false

some 若目标数组中有一个或一个以上的对象符合条件的返回true,否则返回false

案例

var users = [
    {name:"Jill",age:10},
    {name:"Alex",age:18},
    {name:"Bill",age:20},
    {name:"Tony",age:24}
   ];

   var isAdult_every=users.every(user=>{
      return user.age>18;
   })

   var isAdult_some=users.some(user=>{
    return user.age>18;
 })

   console.log(isAdult_every)  //false
   console.log(isAdult_some)  //true

 

reduce()

常用于叠加,可以代替forEach等

案例计算数组中所有值的总和

var numbers = [1,2,3,4,5];
   var sumValue = numbers.reduce(function(sum,number2){  //第一个参数为叠加总值,需要初始化,第二个参数是当前项
    return sum + number2;
  },0);    //sum的初始化
  console.log(sumValue);   //15

 

 

 

ES6(ECMAScript 2015)为数组引入了许多新方法,这些方法极大地增强了数组的操作能力,使 JavaScript 更适合构建大型应用程序。以下是 ES6新增的一些主要数组方法及其功能说明: ### `Array.from()` 此方法用于从类数组对象或可迭代对象创建一个新的数组实例。它还可以接受一个映射函数作为第二个参数,用于在创建数组时对每个元素进行处理。例如: ```javascript const arrayLike = { 0: 'a', 1: 'b', length: 2 }; const arr = Array.from(arrayLike); console.log(arr); // 输出: ['a', 'b'] ``` 此外,`Array.from()` 会将数组的空位转为 `undefined`,这与 ES6 中其他处理空位的方法一致,如 `Array.from`、扩展运算符、`copyWithin()`、`fill()`、`entries()`、`keys()`、`values()`、`find()` 和 `findIndex()` 等方法的行为一致 [^4]。 ### `Array.of()` `Array.of()` 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。例如: ```javascript const arr1 = Array.of(1, 2, 3); console.log(arr1); // 输出: [1, 2, 3] const arr2 = Array.of(7); console.log(arr2); // 输出: [7] ``` 此方法与 `new Array()` 不同,当传入单个数字时,`Array.of(7)` 会创建一个包含单个元素 `7` 的数组,而 `new Array(7)` 则会创建一个长度为 7 但元素为空的数组 [^2]。 ### `Array.prototype.find()` `find()` 方法返回数组中满足提供的测试函数的第一个元素的值。如果没有找到符合条件的元素,则返回 `undefined`。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; const found = numbers.find(num => num > 3); console.log(found); // 输出: 4 ``` 此方法特别适用于需要查找数组中特定条件下的第一个匹配项的情况 [^2]。 ### `Array.prototype.findIndex()` `findIndex()` 方法与 `find()` 类似,但它返回的是满足条件的元素的索引,而不是元素本身。如果未找到符合条件的元素,则返回 `-1`。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; const index = numbers.findIndex(num => num > 3); console.log(index); // 输出: 3 ``` ### `Array.prototype.fill()` `fill()` 方法用于填充数组中的所有元素,从起始索引到结束索引(不包括结束索引)。例如: ```javascript const arr = [1, 2, 3, 4, 5]; arr.fill(0, 1, 4); console.log(arr); // 输出: [1, 0, 0, 0, 5] ``` 此方法可以用于快速初始化数组或重置数组的某些部分 [^4]。 ### `Array.prototype.copyWithin()` `copyWithin()` 方法用于在同一数组内部复制数组元素,从目标位置开始替换。例如: ```javascript const arr = [1, 2, 3, 4, 5]; arr.copyWithin(0, 3); console.log(arr); // 输出: [4, 5, 3, 4, 5] ``` 此方法允许在同一数组内高效地移动数据 [^4]。 ### `Array.prototype.entries()`, `keys()`, 和 `values()` 这些方法分别返回一个新的迭代器对象,该对象包含数组的键值对、键或值。它们主要用于支持 `for...of` 循环等现代迭代机制。例如: ```javascript const arr = ['a', 'b', 'c']; const entries = arr.entries(); console.log([...entries]); // 输出: [[0, 'a'], [1, 'b'], [2, 'c']] ``` 这些方法使得数组更易于与其他可迭代对象一起使用 [^4]。 ### `Array.prototype.includes()` `includes()` 方法用于判断数组是否包含指定的元素,返回一个布尔值。例如: ```javascript const arr = [1, 2, 3, 4, 5]; console.log(arr.includes(3)); // 输出: true console.log(arr.includes(6)); // 输出: false ``` 此方法提供了一种简洁的方式来检查数组中是否存在某个值 [^3]。 ### `Array.prototype.map()` `map()` 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; const squared = numbers.map(num => num * num); console.log(squared); // 输出: [1, 4, 9, 16, 25] ``` 此方法非常适合对数组中的每个元素进行转换或处理 [^1]。 ### `Array.prototype.filter()` `filter()` 方法创建一个新数组,包含所有通过测试函数的元素。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; const even = numbers.filter(num => num % 2 === 0); console.log(even); // 输出: [2, 4] ``` 此方法非常适合从数组中筛选出符合特定条件的元素 。 ### `Array.prototype.reduce()` 和 `reduceRight()` `reduce()` 方法数组中的每个元素执行一个由您提供的 reducer 函数(升序),将其结果汇总为单个输出值。`reduceRight()` 则是从右到左执行。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce((acc, curr) => acc + curr, 0); console.log(sum); // 输出: 15 ``` 此方法非常适合用于聚合操作,如求和、计数等 [^3]。 ### `Array.prototype.some()` 和 `every()` `some()` 方法测试数组中是否有至少一个元素通过了提供的测试函数,返回一个布尔值。`every()` 方法则测试数组中的所有元素是否都通过了测试函数。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; console.log(numbers.some(num => num > 3)); // 输出: true console.log(numbers.every(num => num > 0)); // 输出: true ``` 这些方法非常适合用于逻辑判断和验证 [^3]。 ### `Array.prototype.forEach()` `forEach()` 方法数组中的每个元素执行一次提供的函数。此方法没有返回值。例如: ```javascript const numbers = [1, 2, 3, 4, 5]; numbers.forEach(num => console.log(num)); // 输出: 1, 2, 3, 4, 5 ``` 此方法非常适合用于遍历数组并执行副作用操作 [^3]。 ### `Array.prototype.indexOf()` 和 `lastIndexOf()` `indexOf()` 方法返回数组中第一个匹配指定值的元素的索引,如果没有找到则返回 `-1`。`lastIndexOf()` 则是从后向前查找。例如: ```javascript const arr = [1, 2, 3, 2, 1]; console.log(arr.indexOf(2)); // 输出: 1 console.log(arr.lastIndexOf(2)); // 输出: 3 ``` 这些方法非常适合用于查找数组中元素的位置 。 ### `Array.prototype.join()` `join()` 方法数组的所有元素连接成一个字符串,并返回这个字符串。例如: ```javascript const arr = ['apple', 'banana', 'cherry']; const str = arr.join(', '); console.log(str); // 输出: "apple, banana, cherry" ``` 此方法非常适合用于生成字符串表示形式 。 ### `Array.prototype.slice()` `slice()` 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括 end)。例如: ```javascript const arr = [1, 2, 3, 4, 5]; const subArr = arr.slice(1, 4); console.log(subArr); // 输出: [2, 3, 4] ``` 此方法非常适合用于提取数组的子集 。 ### `Array.prototype.splice()` `splice()` 方法可以用来修改数组的内容,删除或添加元素。例如: ```javascript const arr = [1, 2, 3, 4, 5]; arr.splice(2, 1, 'a', 'b'); console.log(arr); // 输出: [1, 2, 'a', 'b', 4, 5] ``` 此方法非常适合用于动态修改数组内容 [^3]。 ### `Array.prototype.sort()` `sort()` 方法用于对数组的元素进行排序。默认情况下,排序是基于字符串 Unicode 码点进行的。例如: ```javascript const arr = [3, 1, 4, 2, 5]; arr.sort(); console.log(arr); // 输出: [1, 2, 3, 4, 5] ``` 此方法非常适合用于对数组进行排序 。 ### `Array.prototype.reverse()` `reverse()` 方法用于颠倒数组中元素的顺序。例如: ```javascript const arr = [1, 2, 3, 4, 5]; arr.reverse(); console.log(arr); // 输出: [5, 4, 3, 2, 1] ``` 此方法非常适合用于反转数组顺序 。 ### `Array.prototype.toString()` `toString()` 方法返回一个字符串,表示指定的数组及其元素。例如: ```javascript const arr = [1, 2, 3]; const str = arr.toString(); console.log(str); // 输出: "1,2,3" ``` 此方法非常适合用于生成数组的字符串表示 [^3]。 ### `Array.prototype.toLocaleString()` `toLocaleString()` 方法返回一个字符串,表示数组中的元素。此方法会根据本地化设置格式化元素。例如: ```javascript const arr = [1, 2, 3]; const str = arr.toLocaleString(); console.log(str); // 输出: "1,2,3" (根据本地化设置可能不同) ``` 此方法非常适合用于生成本地化的字符串表示 [^3]。 ### `Array.prototype.push()`, `pop()`, `shift()`, 和 `unshift()` 这些方法分别用于向数组末尾添加元素、从数组末尾移除元素、从数组开头移除元素、向数组开头添加元素。例如: ```javascript const arr = [1, 2, 3]; arr.push(4); console.log(arr); // 输出: [1, 2, 3, 4] arr.pop(); console.log(arr); // 输出: [1, 2, 3] arr.shift(); console.log(arr); // 输出: [2, 3] arr.unshift(1); console.log(arr); // 输出: [1, 2, 3] ``` 这些方法非常适合用于动态修改数组内容 [^3]。 ### `Array.prototype.concat()` `concat()` 方法用于合并两个或多个数组。此方法不会修改现有数组,而是返回一个新数组。例如: ```javascript const arr1 = [1, 2]; const arr2 = [3, 4]; const combined = arr1.concat(arr2); console.log(combined); // 输出: [1, 2, 3, 4] ``` 此方法非常适合用于合并数组 。 ### `Array.prototype.flat()` 和 `flatMap()` `flat()` 方法用于递归展开数组中的嵌套数组。`flatMap()` 则是先映射每个元素,然后展开结果。例如: ```javascript const arr = [1, [2, [3, 4], 5]]; const flattened = arr.flat(); console.log(flattened); // 输出: [1, 2, 3, 4, 5] ``` 这些方法非常适合用于处理嵌套数组 。 ### `Array.prototype.flatMap()` `flatMap()` 方法首先使用映射函数映射每个元素,然后将结果展平一层。例如: ```javascript const arr = [1, 2, 3]; const result = arr.flatMap(x => [x, x * 2]); console.log(result); // 输出: [1, 2, 2, 4, 3, 6] ``` 此方法非常适合用于同时进行映射和展平操作 [^3]。 ### `Array.prototype.at()` `at()` 方法返回数组中指定索引位置的元素。支持负数索引,表示从数组末尾开始计数。例如: ```javascript const arr = [1, 2, 3, 4, 5]; console.log(arr.at(2)); // 输出: 3 console.log(arr.at(-1)); // 输出: 5 ``` 此方法非常适合用于访问数组中的特定元素 [^3]。 ### `Array.prototype.with()` `with()` 方法返回一个新的数组副本,其中指定索引位置的元素被替换为新的值。例如: ```javascript const arr = [1, 2, 3, 4, 5]; const newArr = arr.with(2, 'a'); console.log(newArr); // 输出: [1, 2, 'a', 4, 5] ``` 此方法非常适合用于创建数组的不可变更新 。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值