javascript - 返回不工作和过于复杂的代码
问题描述
作为更大功能的一部分,我试图简单地运行检查以查看数组中的值是否“增加” - 例如:
var a = [1,2,3,4,5] // is increasing
var a = [1,4,6,7,36] // is increasing
var a = [1,6,3,6,5] // not increasing
如果前一个值 a[previous] 小于 a[next],它会增加。出于某种原因,问题是当它不增加时它不会返回 -1。而且,当我学习 JavaScript 时,我的代码似乎比它应该的要复杂得多。
我的问题:
1. 为什么当 a 不能增加时它不返回 -1?
2. 为什么这么简单的测试我的代码看起来那么复杂?我错过了什么吗?(也就是说,如果您认为它过于复杂,我的代码通常就是这样)
编写这样一个函数的更好方法是什么?我应该将“测试是否已经增加”部分放在单独的函数中吗?如果有人也可以提供关于编写更好、更简单、可读、更干燥的代码的提示,那将不胜感激:)
var a = [1,2,3,4,5]
var canIncrease = 0; // boolean
// test if already increased
for(i=0;i<a.length;i++) {
if((a[i] < a[i+1] && i !== a.length-1)||(a[i] > a[i-1] && i==a.length-1)) {
console.log('index ' + i + ' cannot increase');
} else {
console.log('index ' + i + ' can increase');
canIncrease = 1;
}
}
if (!canIncrease) {
console.log('array a cannot increase');
return -1;
} else {
console.log('would continue');
// continue with main function...
}
解决方案
every()
如果元素是最后一个元素或小于下一个元素,则可以使用并返回 true。
function func(arr) {
return arr.every((o, i, a) => (i + 1) === a.length || o < a[i + 1] );
}
console.log(func([1, 2, 3, 4, 5]));
console.log(func([1, 4, 6, 7, 36]));
console.log(func([1, 6, 3, 6, 5]));
文档:每个()
推荐阅读
- c++ - 动态数组大小来计算矩阵的行列式
- css - 图像对齐未正确设置为右上角
- linux - 找不到 FASTA 索引
- c# - C# .NET 控制台应用程序获取键盘输入
- python - lst[:] = [1,2,3] 是什么意思?
- python - Python - 当变量仅在错误时使用时,使用全局变量或传递给函数是更好的做法吗
- docker - 通过 google-fluentd 使来自 Docker 容器的 JSON 日志字段在 GCP 日志中可用
- android - 用于 recyclerview 项目的数组加倍
- parsing - 从 CBS 网站提取所有季节和剧集视频链接
- python - UFuncTypeError: ufunc 'subtract' 不能使用类型为 dtype('
当我解决这个错误时,有一些函数可以解决这个问题,ufunc 'subtract' 不能使用类型为 dtype ('<M8 [ns]') 和 dtype ('float64') 的操作数,或者该程序工作的另一种方式并给出我以下数据: