簡體   English   中英

我如何使我的功能更有效?

[英]how can i make my function more efficient?

大家好,我寫了一個比較數組值並返回最小值的函數,但我想知道是否有辦法使它更有效,例如遍歷所有數組(使用一個循環)並將結果放入一個新數組中或使單個數組單個數組的arrays子數組,等等。該函數還提供正確的輸出,但會打印出3次答案:

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));

所以有2條建議:

  1. 使用更多動態結構(數組數組)而不是定義22個數組。
  2. 使用內置的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索引)可能是有意義的。 如果您走那條路線,請先從Google搜索“排序算法”開始

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM