我怎样才能使我的函数更有效率
how can i make my function more efficient?
嘿伙计们,我写了一个函数,比较数组值并返回最小值,但我想知道是否有方法使其更有效,如迭代所有数组(使用一个循环),并将结果放在一个新的数组或使单个数组的子数组单个数组等。该函数还提供了正确的输出,但打印了三次答案:
var nums1 = [-7528819, 3927361, -6398192];
var nums2 = [1777100, -2299720, -5566643];
var nums3 = [7188445, 3724971, 7699332];
var nums4 = [-8432528, -159836, -1604959];
var nums5 = [2764889, 4681472, 701396];
var nums6 = [-5073513, 599535, 4388457];
var nums7 = [8689640, 8028586, 1022322];
var nums8 = [-1088592, 1211232, -7868192];
var nums9 = [-5848613, -4945165, 631213];
var nums10 = [3218429, -833619, -1495854];
var nums11 = [8007060, 1637562, -7568493];
var nums12 = [-8391131, -6585338, 131787];
var nums13 = [-3957775, -9396892, -6143241];
var nums14 = [-6258442, -7829421, 3696922];
var nums15 = [2136598, 4935467, -1621605];
var nums16 = [-7162005, 9861954, 8977930];
var nums17 = [7226452, 8551594, 7006517];
var nums18 = [-1751226, -2536997, -1782251];
var nums19 = [380582, 1614389, 3272584];
var nums20 = [-8988205, -5167181, -7561034];
var nums21 = [-484059, -7160121, 4076528];
var nums22 = [1947448, -5551253, 7491190];
var numsLength = nums1.length;
var i = 0;
var minNum;
function test(arr) {
for (i; i < numsLength; i++) {
if (arr[0] < arr[1] && arr[2]) {
minNum = arr[0];
} else if (arr[1] < arr[2] && arr[0]) {
minNum = arr[1];
} else if (arr[2] < arr[1] && arr[0]) {
minNum = arr[2];
}
console.log(minNum);
}
}
test(nums1);
可以直接用Math.min
函数
console.log(Math.min.apply(null, nums1));
查看他的代码片段并阅读内联注释:
var nums = [];
// I'm pushing only 3 sets of data, but there can be any number
// Also there can be any number of elements in each array as you can see
nums.push([-7528819, 3927361, -6398192]);
nums.push([1777100, -2299720, -5566643, 380582]);
nums.push([7188445, 3724971, 7699332, 1947448, -5551253, 7491190]);
function produceResults(nums) {
var i,
results = [];
// gathering results
for (i = 0; i < nums.length; i++) {
results.push(Math.min.apply(null, nums[i]));
}
return results;
}
console.log(produceResults(nums));
有两个建议:
- 使用更动态的结构(数组的数组)代替定义22个数组。
- 使用JS内置的函数和组件(Math.min)
展开循环实际上是大多数情况下最有效的循环实现。然而,实际上,展开循环通常是不可行的。对于一个小的、固定大小的数组,就像这里的数组一样,循环的每个排列都是显而易见的,如果您的目标是原始速度,那么您不可能获得比现有的效率更高的效率。也就是说,正如其他人指出的那样,函数中的循环是无用的。,因为你实际上已经展开了这个循环。此外,if语句的语法不正确,并且您没有处理数组中值相等的情况。对于大小为3的固定数组,您需要在…
if (val1 <= val2 && val1 <= val3) {
minVal = val1;
} else if (val2 <= val1 && val2 <= val3) {
minVal = val2;
} else minVal = val3;
现在,如果你想对任意大小的数组进行最小值的任意搜索,你可以做类似的事情,但使用循环,如…
var minVal = null;
for (var i = 0; i < arr.length; i++) {
if (minVal === null || minVal > (val = arr[i]))
minVal = val;
}
根据您实际想要完成的任务和数组的大小,对数组进行排序并从排序数组返回最小值(0索引)可能是有意义的。如果你走那条路,从谷歌搜索"排序算法"开始
相关文章:
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 为什么我的函数没有被调用呢
- 为什么我的函数没有返回准确的计数
- 我的函数返回“未定义”
- 用我的函数jquery给出数据/参数
- 从未达到我的函数调用-ReactJs 0.12.0
- 我的函数不会返回要保存在数组中的对象
- 为什么点击或更改事件都没有触发我的函数
- 为什么如果我的函数中的范围被 javascript 解释器完全忽略了
- 我的函数调用在回显中不起作用
- 我的函数返回空.为什么
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 如何在我的函数中使用 .bind()
- 在jQuery中,我的函数不起作用
- 为什么不是'我的函数未按预期在文档加载时运行
- 传递的变量不适用于我的函数-Javascript
- jQuery:我的函数需要一个反垃圾邮件
- 为什么不是't调用我的函数
- 为什么我的函数参数说是未定义的