广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript中数组方法的错误使用例子
  • 772
分享到

JavaScript中数组方法的错误使用例子

2024-04-02 19:04:59 772人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关javascript中数组方法的错误使用例子,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 不要使用Array.indexOf,使用Arr

这篇文章将为大家详细讲解有关javascript数组方法的错误使用例子,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1. 不要使用Array.indexOf,使用Array.includes

“如果你要在数组中查找元素,使用Array.indexOf!”。记得在我学习JavaScript课程时候,有这样一句话。这句话没错,确实可以这么使用!

根据MDN文档:“Array.indexOf会返回被查找元素第一个匹配的位置的下标。”因此,如果后面需要用到这个索引,Array.indexOf是一个很好的解法。但是,我们要解决的问题是:查找数组中是否包含某个元素。这是一个Yes/No的问题,是一个返回布尔类型的真假问题。因此,我建议使用Array.includes,它会返回一个布尔值。

'use strict';
const characters = [
 'ironman',
 'black_widow',
 'hulk',
 'captain_america',
 'hulk',
 'thor',
];
console.log(characters.indexOf('hulk'));
// 2
console.log(characters.indexOf('batman'));
// -1
console.log(characters.includes('hulk'));
// true
console.log(characters.includes('batman'));
// false

2. 不要使用Array.filter,使用Array.find

Array.filter是一个很有用的函数,它返回一个满足过滤条件的新数组。正如其名字表达的含义,它是用来做过滤的。

但是,如果我们知道我们要的结果只有一个元素的时候,我就不建议使用它了。比如,如果我们的回调函数定义用一个唯一的ID来过滤,那么结果必然唯一了。在这个情况下,Array.filter会返回只有一个元素的数组。因为既然能通过一个特定的ID来查找,我们已经确定只有一个元素了,那么使用数组就没有意义。

另外,我们再来聊聊性能问题。为了返回所有匹配的元素,Array.filter需要查找整个数组。可以想象一下,如果有上百个元素满足过滤条件,那么返回的数组就很大。

为了避免这样的情况,我建议使用Array.find。它仅仅返回第一个满足过滤条件的元素。而且,Array.find会在查找到第一个满足条件的元素后就结束执行,而不会查找整个数组。

'use strict';
const characters = [
 { id: 1, name: 'ironman' },
 { id: 2, name: 'black_widow' },
 { id: 3, name: 'captain_america' },
 { id: 4, name: 'captain_america' },
];
function getCharacter(name) {
 return character => character.name === name;
}
console.log(characters.filter(getCharacter('captain_america')));
// [
//  { id: 3, name: 'captain_america' },
//  { id: 4, name: 'captain_america' },
// ]
console.log(characters.find(getCharacter('captain_america')));
// { id: 3, name: 'captain_america' }

3. 不要使用Array.find,使用Array.some

我承认我犯过很多次错误。后来,一个很要好的朋友让我去看看MDN的文档,说有更好的解决方案。这个情况和刚刚提到的Array.indexOf/Array.includes很像。

在前面的例子中,我们看到Array.find接受一个过滤函数,返回满足的元素。那么,如果我们要查找一个数组是否包含某个元素的时候,Array.find是否是最佳的方案呢?可能不是,因为它返回的是元素具体的值,而不是布尔值。

我推荐大家使用Array.some,它会返回布尔值。

'use strict';
const characters = [
 { id: 1, name: 'ironman', env: 'marvel' },
 { id: 2, name: 'black_widow', env: 'marvel' },
 { id: 3, name: 'wonder_woman', env: 'dc_comics' },
];
function hasCharacterFrom(env) {
 return character => character.env === env;
}
console.log(characters.find(hasCharacterFrom('marvel')));
// { id: 1, name: 'ironman', env: 'marvel' }
console.log(characters.some(hasCharacterFrom('marvel')));
// true

4. 不要使用Array.map和Array.filter组合,使用Array.reduce

Array.reduce有点难以理解!但是,如果我们每次在同时使用Array.filter和Array.map的时候,你是否觉察到需要点东西,对不?

我的意思是:我们对整个数组循环了2遍。第一次是过滤返回一个新的数组,第二次通过map又构造一个新的数组。我们使用了两个数组方法,每一个方法都有各自的回调函数,而且Array.filter返回的数组以后再也不会用到。

为了避免低效率,我建议使用Array.reduce。同样的结果,更优雅的代码!请看下面的例子:‘'

'use strict';
const characters = [
 { name: 'ironman', env: 'marvel' },
 { name: 'black_widow', env: 'marvel' },
 { name: 'wonder_woman', env: 'dc_comics' },
];
console.log(
 characters
  .filter(character => character.env === 'marvel')
  .map(character => Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
);
// [
//  { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
//  { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
// ]
console.log(
 characters
  .reduce((acc, character) => {
   return character.env === 'marvel'
    ? acc.concat(Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
    : acc;
  }, [])
)
// [
//  { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
//  { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
// ]

关于“JavaScript中数组方法的错误使用例子”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中数组方法的错误使用例子

本文链接: https://www.lsjlt.com/news/73122.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中数组方法的错误使用例子
    这篇文章将为大家详细讲解有关JavaScript中数组方法的错误使用例子,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 不要使用Array.indexOf,使用Arr...
    99+
    2022-10-19
  • JavaScript中array.reduce()数组方法的四种使用实例
    目录1、累加和累积乘法2、获取一个数组的最大值和最小值3、计算数组中元素出现的频率4、多个数组的展平总结Array.prototype.reduce() 是数组中最强大的方法之一,也...
    99+
    2022-11-13
  • JavaScript数组reduce()方法使用实例详解
    目录前言1、累加和累积乘法2、获取一个数组的最大值和最小值3、计算数组中元素出现的频率4、多个数组的展平总结前言 今天请让我详细介绍一下这个方法,希望对你有帮助。 这是 reduce...
    99+
    2022-11-13
  • GoFrame错误处理常用方法及错误码使用示例
    目录前言错误创建New/NewfWrap/WrapfNewSkip/NewSkipf错误码使用错误码相关方法概览NewCode/NewCodef示例代码WrapCode/WrapCo...
    99+
    2022-11-13
  • JavaScript数组方法的示例分析
    这篇文章将为大家详细讲解有关JavaScript数组方法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。抛砖引玉在开始正式讲被我们忽略的一些数组方法之前,我还是想...
    99+
    2022-10-19
  • JavaScript数组实例的9个方法
    目录前言mapfiltersomeeveryreduceforEachfind和findIndexjoin总结前言 手写JS原生API在面试中很常见,今天努力工作之余(摸鱼的时候)翻...
    99+
    2022-11-13
  • JavaScript中数组flat方法的使用与实现方法
    目录前言语法参数返回值使用示例方法实现1、当只扁平化一层的时候2、当数组展平的层数为最大层时3、数组扁平化使用参数控制扁平的深度总结前言 flat() 方法会按照一个可指定的深度递归...
    99+
    2022-11-13
  • 使用async await处理错误方法示例
    目录Promise封装请求async/awaitawait-to-js源码很简单使用很简单Promise封装请求 大家平时如果使用Promise封装请求,那么当你使用这个请求函数的时...
    99+
    2022-11-13
  • JS数组中filter方法的使用实例
    目录1、定义2、语法3、参数说明4、用法5、注意事项6、使用实例附:多条件单数据筛选总结1、定义   filter()创建一个新的数组,新数组中的元素是通过检查指...
    99+
    2022-11-13
  • Vue中子组件调用父组件的3种方法实例
    目录1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。2.子组件用“$emit”向父组件触发一个事件,...
    99+
    2022-11-13
  • React父组件调用子组件中的方法实例详解
    目录Class组件1. 自定义事件2. 使用 React.createRef()3. 使用回调RefsFunction组件补充:子组件调用父组件方法总结文章中涉及 ref 的应用仅为...
    99+
    2022-11-13
  • javascript如何使用数组中的sort方法
    这篇文章主要为大家展示了“javascript如何使用数组中的sort方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript如何使用数组中的so...
    99+
    2022-10-19
  • JavaScript中数组reduce()方法使用详情
    语法: reduce()对数组中的每个元素进行累加,返回一个新的值,可以传入初始值简单的讲就是返回数组中所有元素的和数  不会改变原始组的值  不会对空数组执行回...
    99+
    2022-11-13
  • javascript数组中的findIndex方法
    目录1findIndex()简单介绍2编辑器3代码部分4运行结果5总结1findIndex()简单介绍 findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元...
    99+
    2022-11-13
  • javascript数组中的lastIndexOf方法
    目录1前言​​2编辑器打开​​3代码部分4运行结果5总结1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说lastIndexOf方法,lastIndexOf(...
    99+
    2022-11-13
  • JavaScript如何使用数组方法
    小编给大家分享一下JavaScript如何使用数组方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介说明方法简介join():用指定的分隔符将数组每一项拼接为字符串push():向数组的末尾添加新元素pop():删除数...
    99+
    2023-06-22
  • 15个JavaScript数组方法的实例介绍
    本篇内容主要讲解“15个JavaScript数组方法的实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“15个JavaScript数组方法的实例介绍”吧!在...
    99+
    2022-10-19
  • react-native 父函数组件调用类子组件的方法(实例详解)
    react-native 父函数组件调用类子组件的方法,代码如下所示: import React, {Component} from 'react'; import {Text, V...
    99+
    2022-11-13
  • JavaScript中forEach的错误用法汇总
    目录前言语法错误用法添加或删除原数组中的数据修改原数组中的数据回调函数中使用异步函数使用return结束循环未传入this正确用法总结前言 使用过forEach的人大致有两种:普通使...
    99+
    2022-11-13
  • 常用的JavaScript数组方法
    目录1、filter()2、forEach()3、some()4、every()5、reduce()6、合并数组1、filter() 语法: array.filter(functi...
    99+
    2022-11-12
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作