首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

输出显示NaN,但是我需要数组的和

问题分析

当你在编程中遇到输出显示为 NaN(Not a Number)时,通常意味着某个操作试图将非数字值当作数字来处理。这在数组求和时尤为常见,可能是因为数组中包含了非数字类型的元素。

基础概念

  • NaN:JavaScript 中的一个特殊值,表示不是一个数字(Not a Number)。通常在数值运算中出现错误时返回。
  • 数组求和:对数组中的所有数字进行相加,得到它们的总和。

可能的原因

  1. 数组中包含非数字元素:例如字符串、对象、undefinednull 等。
  2. 数值类型不正确:例如 Infinity-InfinityNaN

解决方法

为了确保数组中的所有元素都是数字并正确求和,可以使用以下方法:

方法一:使用 Array.prototype.reduce 和类型检查

代码语言:txt
复制
function sumArray(arr) {
  return arr.reduce((acc, val) => {
    if (typeof val === 'number' && !isNaN(val)) {
      return acc + val;
    }
    return acc;
  }, 0);
}

const arr = [1, 2, '3', 4, null, undefined, NaN];
console.log(sumArray(arr)); // 输出: 7

方法二:使用 Array.prototype.filterArray.prototype.reduce

代码语言:txt
复制
function sumArray(arr) {
  const filteredArr = arr.filter(val => typeof val === 'number' && !isNaN(val));
  return filteredArr.reduce((acc, val) => acc + val, 0);
}

const arr = [1, 2, '3', 4, null, undefined, NaN];
console.log(sumArray(arr)); // 输出: 7

应用场景

这种方法适用于任何需要对数组中的数字进行求和的场景,特别是在处理用户输入或从外部数据源获取的数据时,确保数据的正确性和可靠性。

参考链接

通过上述方法,你可以有效地处理数组中的非数字元素,确保求和结果的准确性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么建议需要定期重建数据量大但是性能关键

如果大家发现网上有抄袭本文章,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么建议”系列第三篇,本系列中会针对一些在高并发场景下,对于组内后台开发一些开发建议以及开发规范要求进行说明分析解读...往期回顾: 为什么建议在复杂但是性能关键表上所有查询都加上 force index 为什么建议线上高并发量日志输出时候不能带有代码位置 一般现在对于业务要查询数据量以及要保持并发量高于一定配置单实例...BY id DESC LIMIT 20 这个表分片键就是 user_id 一方面,正如我在“为什么建议在复杂但是性能关键表上所有查询都加上 force index”中说,数据量可能有些超出我们预期...MySQL 5.6.17 之后,Optimize table 命令变成了 Online DDL,仅仅在准备阶段以及最后提交阶段,需要获取锁,中间执行阶段,是不需要,也就是不会阻塞业务更新 DML...FORCE),但是与 Analyze 命令不同是, Optimize Table 是 online DDL 并且优化了机制,只会在准备阶段最后提交阶段获取表锁,这样大大减少了业务 DML 阻塞时间

85430
  • 在Android界面上显示获取Logcat日志输出方法

    首先我们要先定义一个String[]数组,里面的代码是 //第一个是Logcat ,也就是我们想要获取log日志 //第二个是 -s 也就是表示过滤意思 //第三个就是 我们要过滤类型 W表示warm...process类,作用通俗来讲就是用Java代码来进行adb命令行操作代码是: Process exec = Runtime.getRuntime().exec(running); 通过以上方法我们就可以获得过滤...然后我们再打开我们SDCard中文件目录: ? 这样我们就已经获取到了Logcat中日志(可以控制台对比一下): ? 由于我开启了两次所以打印出了两次log....; 使用BufferedReader方法读取我们获取字符流; 最后我们用While循环正则表达式来把每一行都给放入List中; 最后我们返回List; InputStreamReader isr...好了,我们显示日志也已经成功了。接下来就是要可以清空日志; 最后、清空日志 如何清空日志呢?

    4.5K20

    C# 中参数数组、引用参数输出参数

    C# 中参数数组、引用参数输出参数 本文目录 1 参数数组 2 引用参数 3 输出参数 参数数组 在C#中,可以为函数指定一个不定长参数,这个参数是函数定义中最后一个参数,这个参数叫做参数数组。...,即vals,在定义该参数时,需要使用params参数。...,由于函数SwapInts使用了引用参数,所以可以在函数中修改变量ab值,需要注意是,在调用函数时也要使用ref传递引用参数。...输出参数 输出参数使用out关键字,它效果与引用参数几乎相同,不同点是: 引用参数实参必须是已经赋值变量,而输出参数不必。 函数使用输出参数时,应该把它看作是未赋值。...."); Console.ReadKey(); } }} 这个函数将一个数组中最大值索引作为输出参数,返回最大值。

    3.2K30

    会议室, 输入是一个数组, 所有会议开始结束时间. 输出一共需要多少个会议室

    会议室, 输入是一个数组, 所有会议开始结束时间....输出一共需要多少个会议室 参数: 二维数组, 例 [[10, 20], [20, 30]], 返回:需要会议室个数, 例 1 另一个测试用例: [[10,20], [19,30]] =>...meetings == null || meetings.length == 0) return 0; meetings.sort((x, y) => x[0] - y[0]) // 获取当前会议结束时间...var meetingEnd = meetings[0][1]; // 数组第一个元素存在,说明会议室已经占用一个 var room = 1; // 依次查看每个会议开始时间...,是否在前面结束最早会议结束后开始, // 如果来及就不需要再开一间会议室,但是要更新最早结束会议时间 // 如果前面的会议室在本次会议开始时都未结束,那么开一个会议室,并且更新最早结束会议室时间

    59320

    ​《爱上潘大师》系列-你还记得那年DataFrame吗

    6 7 2 8 9 10 11 结果DataFrame 会自动加上行索引列索引,Series 创建一样 那应该怎么显示声明行、列索引?...= ['a', 'b', 'c'] # 显示指定行、列索引 df_data1 = pd.DataFrame(arr_data, columns=columns, index=index) # 输出...经常读文章同学要是会了前三种,还不会第四种? 不妨看一下NumPy 数组创建?顺便反思一下? 索引对象 DataFrame 已经创建好了,但是索引还不太明白,是Series一样吗?...17.0 97.0 NaN 3 NaN NaN NaN NaN 对行、列都进行重新索引,索引值不存在会用空值填充 索引很重要,是Pandas 数据模型重要部分...,但是我们了解上面的内容就够了,也没必要去深究它。

    85900

    “复制100个物体坐标的值(xyz)旋转值(xyz)你需要几次操作?----600次”,“需要2次”

    一、前言 在开发中,会遇到要复制场景中对象位置坐标的操作,通常方法是分别复制物体xyz值,然后再粘贴,这样效率非常低,耽误时间,也可以复制错误,造成位置偏移。...+ "f"; GUIUtility.systemCopyBuffer = ret; } } } 选中物体之后,使用快捷键 Ctrl+X ,就可以将选中物体坐标位置复制下来...,然后在要复制地方Ctrl+V就可以复制出来。。...Transform组件Rotation值 使用transform.localRotation四元数也可以 但是需要transform.localRotation.eulerAngles转成欧拉角 四元数跟欧拉角之间关系就不在这篇讲了...2、基于团队持续优化之道

    1K20

    Go+语言初体验——环境搭建并用命令行 VScode 输出 “Hello World”

    社区频道地址:https://bbs.csdn.net/topics/603677526 活动地址:Go+语言初体验” | 征文活动进行中… Go+ 是什么?...2.配置Go环境变量 跟其他语言一样,为了可以在cmd命令窗口随时随地输入命令,我们还需要配置环境变量。找到高级系统设置中环境变量 新建环境变量。...变量名字叫:GoPath 变量值是你安装目录,放在了E:\Go。 然后找到path,点击编辑。 新建一个%GoPath%\bin ,中间GoPath就是我们前面用变量名。...,放在了E:\gop\gop下命名为main.gop package main func main() { println("Hello World") } 选择运行调试 —> 创建launch.json...“Hello World” 到此我们就完成了环境搭建并用命令行 VScode 输出 “Hello World”。

    1.2K30

    20个稀奇古怪 JavaScript 表达式,你要挑战回答一下嘛

    [,,,].length [,,,] 输出一个有三个空槽数组。最后一个逗号是尾部逗号。 你可以这么想。...toString()方法是JavaScript 内部使用,当一个数组需要显示为文本时,它将用逗号连接其元素。...0/0 这是一个非法数学表达式。方程0/0没有任何有意义数字答案,输出结果只是NaN。 1/0 === 10 1000** 虽然1/0之前一样也是一个非法数学表达式。...1 + 2; // -> 3 3 + "3"; // -> "33" 总结 坦率地说,这些挑战并没有为胶们编码技能提供任何价值,所以不应该在实际项目中写这种代码 但是,把这些技巧作为朋友同事之间一些装...交流 本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了很多文档,欢迎Star完善,大家面试可以参照考点复习

    53220

    前端入门8-JavaScript语法之数据类型变量声明正文-数据类型、变量

    也就是,在 JavaScript 里,函数和数组,本质上也是对象。 变量相关 由于我本身有 Java 基础了,所以 JavaScript 一些很基础语法可能会漏掉了,但影响不大。...因此,在执行函数内第一行代码时,输出变量 a 是函数内声明局部变量,而不是函数外部变量,这点行为跟 Java 不一样,需要注意一下。...s已经不是上面的原生类型变量,进行了一次自动转换 console.log(s.len); //输出 undefined,上一行虽然进行了一次包装对象自动转换,但是是临时,那一行代码执行结束,包装对象就销毁了...下一次再继续对原始类型进行属性操作时,创建又是新一个临时包装对象。 显示转换 除了隐式自动转换外,也可以显示手动转换。...-> 其他) "1" 1 true -- ['a'] (普通数组 -> 其他) 使用join()方法 NaN true -- function(){} (函数 -> 其他) 单独讲 NaN true

    1.5K30

    透过网红面试题,超详细解析 parseInt,学不懂找我

    但是在面试时,有时候想要快速了解一个人对某些知识掌握,还是有意义。而且说出答案是一回事,重点还在于他们得出答案分析过程。...与parseFloat有何区别 废话不多说,直接上主菜~ console.log([1, 2, 3, 4].map(parseInt)) 输出结果:1,NaN, NaN, NaN 这个答案,很多人都是清楚...但是关于parseInt还真要仔细说道说道,因为这里有些细节非常容易忽视。 语法 parseInt(string, radix); 返回值 从给定字符串中解析出一个整数,或者NaN。...,但是二进制只有01,找二进制数字就什么都没有找到, 所以输出NaN ; parseInt(4, 3), 这里也是,4 不是3进制中数字, 输出结果NaN 这道题答案就出来了: 1 NaN NaN...NaN 拓展 parseInt还有一个兄弟方法parseFloat, 你知道他们异同点吗,以及它们Number有什么区别?

    3.5K10
    领券