ES6 - 不改变原数组的方法

本文探讨了ES6中不改变原数组的几种方法,包括some、every、map、reduce、filter和slice。这些方法对于处理数组数据非常有用,能够实现条件检查、转换和筛选等操作,同时保持原始数组的完整性。

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

示例数据

let users = [
    {
        "firstName" : "alex",
        "lastName" : "guo",
        "age" : 18
    },
    {
        "firstName" : "fff",
        "lastName" : "LLL",
        "age" : 20
    },
    {
        "firstName" : "www",
        "lastName" : "zzz",
        "age" : 16
    },
    {
        "firstName" : "bbb",
        "lastName" : "ccc",
        "age" : 24
    }
];
  • some方法
// array.some() - 检查数组中是否有元素满足条件。某一元素为true,则为true,否则返回false
// 用于检测数组中是否有满足条件的元素。
// some如果遇到 true 就不再执行了。如果都为 false 返回false。不会改变原数组。
// some 英语翻译为一些,所以some方法 只要其中一个为true 就会返回true的。some:一真即真
let result1 = users.some(item => item.age > 20);
console.info(result1); // true
  • every方法
// array.every() - 检查数组中是否所有元素都满足条件。某一个为false,则返回false,否则返回true
// 用于检测数组中所有元素是否都满足该条件。
// every如果遇到 false 就不在执行了。如果都为 true 返回true。不会改变原数组。
// every 英语翻译为所有,所以every方法 必须所有都返回true才会返回true,哪怕有一个false,就会返回false。every:一假即假
let result2 = users.every(item => item.age > 20);
console.info(result2); // false
  • map方法
// array.map() - 对数组中的每一个元素进行操作。返回每一个元素执行后的结果
// 用于处理数组中的数据。产生新数组,不会改变原数组。foreach这是对原有数组进行操作,没有返回值。
// map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值。
// forEach适合于你并不打算改变数据的时候,而只是想用数据做一些事情 – 比如存入数据库或则打印出来。
let result3 = users.map(item => {
    return item.age*2;
});
console.info(result3); // [ 36, 40, 32, 48 ]
// map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)来玩出更多的花样。
let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(num => num * 2).filter(num => num > 5);
// arr2 = [6, 8, 10]
// 我们首先使用map将每一个元素乘以2,然后紧接着筛选出那些大于5的元素。最终结果赋值给arr2。
  • reduce方法
let result4 = users.reduce((current, next) => {
    return (current.age ? current.age : current) + next.age;
});
console.info(result4); // 78
  • filter方法
let result5 = users.filter(item => {
    if (item.age > 18) {
        return item;
    }
});
console.info(result5); // [{ firstName: "fff", lastName: "LLL", age: 20 }, { firstName: "bbb", lastName: "ccc", age: 24 }]
  • slice方法
// 用于截取数组
let result6 = users.slice(-1);
console.info(result6); // [ { firstName: "bbb", lastName: "ccc", age: 24 } ]
ES6中,数组的操作方法可以分为两类:会改变数组方法改变数组方法。 ### 一、会改变数组方法 这些方法直接对数组进行修改,影响数组的内容或长度。 1. **push()** 和 **pop()**: 在数组的末尾添加或移除元素。 2. **shift()** 和 **unshift()**: 在数组的开头移除或添加元素。 3. **splice()**: 用于添加、删除或替换数组中的元素。 4. **reverse()**: 反转数组项的顺序。 5. **sort()**: 对数组进行排序。 #### 示例代码: ```javascript let arr = [1, 2, 3, 4, 5]; // 使用 push() 添加元素 arr.push(6); console.log(arr); // 输出: [1, 2, 3, 4, 5, 6] // 使用 splice() 修改数组 arr.splice(1, 2, 'a', 'b'); console.log(arr); // 输出: [1, "a", "b", 4, 5, 6] // 使用 reverse() 反转数组 arr.reverse(); console.log(arr); // 输出: [6, 5, 4, "b", "a", 1] // 使用 sort() 排序数组 arr.sort(); console.log(arr); // 输出: [1, "a", "b", 4, 5, 6] ``` 上述代码展示了如何使用这些方法改变数组。例如,`push()` 向数组末尾添加一个新元素,而 `splice()` 则可以在指定位置插入或删除元素。 --- ### 二、改变数组方法 这些方法返回一个新的数组或者值,但会修改数组。 1. **slice()**: 返回从数组中选取的部分元素组成的新数组。 2. **concat()**: 将多个数组合并为一个新数组。 3. **map()**: 创建一个新数组,其结果是对数组每个元素执行回调函数的结果。 4. **filter()**: 创建一个包含所有通过测试的元素的新数组。 5. **reduce()**: 对数组中的每个元素执行回调函数,返回一个累积值。 6. **forEach()**: 遍历数组中的每个元素,但返回任何值。 7. **some()** 和 **every()**: 检查数组中的元素是否满足某个条件。 8. **find()** 和 **findIndex()**: 查找第一个满足条件的元素或其索引。 #### 示例代码: ```javascript let arr = [1, 2, 3, 4, 5]; // 使用 slice() 获取子数组 let subArr = arr.slice(1, 3); console.log(subArr); // 输出: [2, 3] console.log(arr); // 数组未变: [1, 2, 3, 4, 5] // 使用 map() 转换数组元素 let newArr = arr.map(x => x * 2); console.log(newArr); // 输出: [2, 4, 6, 8, 10] console.log(arr); // 数组未变: [1, 2, 3, 4, 5] // 使用 filter() 筛选元素 let filteredArr = arr.filter(x => x > 3); console.log(filteredArr); // 输出: [4, 5] console.log(arr); // 数组未变: [1, 2, 3, 4, 5] ``` 上述代码展示了如何使用这些方法来操作数组改变数组。例如,`slice()` 从数组中提取部分元素并返回新数组,而 `map()` 和 `filter()` 分别用于转换和筛选数组元素。 --- ### 总结 - **改变数组方法** 主要包括 `push()`, `pop()`, `shift()`, `unshift()`, `splice()`, `reverse()`, `sort()` 等。 - **改变数组方法** 包括 `slice()`, `concat()`, `map()`, `filter()`, `reduce()`, `forEach()`, `some()`, `every()`, `find()`, `findIndex()` 等。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值