JavaScript:使用Array方法编写多个函数

时间:2016-02-14 03:02:24

标签: javascript arrays

我需要帮助将多个重复函数写入一个函数中,该函数传入变量而不必反复写入。

目前,我有一些JavaScript函数可以执行相同的操作,只需使用不同的变量和字符串。

var Apple_Data = Info.Apple; // grabs string objects from JSON file
var Banana_Data = Info.Banana; // grabs string objects from JSON file
function CompareApple() {

                if (counter == 0) {
                    prev_Apple_Data = Apple_Data;

                }

                if (Apple_Data > prev_Apple_Data) {
                    if ((Math.abs(Apple_Data - prev_Apple_Data) >= prev_Apple_Data / 2))
                        document.getElementById("Apple_img").src = "img/yelow.png",
                    StartCnt(1);
                    else if ((Math.abs(Apple_Data - prev_Apple_Data) <= prev_Apple_Data / 2))
                        document.getElementById("Apple_img").src = "img/green.png";

                }

                else if (Apple_Data < prev_Apple_Data) {
                    if ((Math.abs(Apple_Data - prev_Apple_Data) >= prev_Apple_Data / 2))
                        document.getElementById("Apple_img").src = "img/yelow.png",
                    StartCnt(1);
                    else if ((Math.abs(Apple_Data - prev_Apple_Data) <= prev_Apple_Data / 2))
                        document.getElementById("Apple_img").src = "img/green.png";
                }

                prev_Apple_Data = Apple_Data;
}

function CompareBanana() {

                if (counter == 0) {
                    prev_Banana_Data = Banana_Data;

                }

                if (Banana_Data > prev_Banana_Data) {
                    if ((Math.abs(Banana_Data - prev_Banana_Data) >= prev_Banana_Data / 2))
                        document.getElementById("Banana_img").src = "img/yelow.png",
                    StartCnt(1);
                    else if ((Math.abs(Banana_Data - prev_Banana_Data) <= prev_Banana_Data / 2))
                        document.getElementById("Banana_img").src = "img/green.png";

                }

                else if (Banana_Data < prev_Banana_Data) {
                    if ((Math.abs(Banana_Data - prev_Banana_Data) >= prev_Banana_Data / 2))
                        document.getElementById("Banana_img").src = "img/yelow.png",
                    StartCnt(1);
                    else if ((Math.abs(Banana_Data - prev_Banana_Data) <= prev_Banana_Data / 2))
                        document.getElementById("Banana_img").src = "img/green.png";
                }

                prev_Banana_Data = Banana_Data;
}

如果我想在传入变量的1函数中编写这些函数,我该怎么做?我认为这个过程就像是,必须制​​作4个不同的空数组

Var PreviousData = []; 
Var CurrentData = [];
Var DeclaredData = []; 
Var ImageArray = []; 

然后编写一个传入这些数组的函数

function Compare(PreviousData, CurrentData, DeclaredData, ImageArray){ 
    if (counter ==0){
        PreviousData = DeclaredData; 
    }
    if (Declared_Data > PreviousData) {
                    if ((Math.abs(Declared_Data - PreviousData) >= PreviousData / 2))
                        document.getElementById("ImageArray").src = "img/yellow.png",
                    StartCnt(1);
                    else if ((Math.abs(Declared_Data - PreviousData) <= PreviousData / 2))
                        document.getElementById("ImageArray").src = "img/green.png";

                }

                else if (Declared_Data < PreviousData) {
                    if ((Math.abs(Declared_Data - PreviousData) >= PreviousData / 2))
                        document.getElementById("ImageArray").src = "img/yellow.png",
                    StartCnt(1);
                    else if ((Math.abs(Declared_Data - PreviousData) <= PreviousData / 2))
                        document.getElementById("ImageArray").src = "img/green.png";
                }
}

计数器和Math.abs被写在那里循环遍历对象并且当前有效。

然后通过类似

的方式初始化函数
Compare(previousData, info.Apple, DeclaredData, ImageArray);

2 个答案:

答案 0 :(得分:1)

默认函数参数允许在没有传递值或未定义的情况下使用默认值初始化形式参数。您可以使用此属性完成整个工作 让我们看一下不同的例子:

-

这里我使用函数function setBackgroundColor(element, color = 'rosybrown') { element.style.backgroundColor = color; } setBackgroundColor(someDiv); // color set to 'rosybrown' setBackgroundColor(someDiv, undefined); // color set to 'rosybrown' too setBackgroundColor(someDiv, 'blue'); // color set to 'blue' 来设置元素的背景颜色。你可以为你的目的做到这一点。

有关详细信息,请访问default_parameters

答案 1 :(得分:1)

您可以将代码简化为:

var infoUpd = {
   'prev': false
};

for (key in Info) {
    infoUpd[ key ] = {
        'data': Info[ key ],
        'img': document.getElementById(key+"_img")
    }
}


function compareStuff( key ) {
        var stuffData = infoUpd[ key ];
    if ( infoUpd.prev ) {
        var calcResult = Math.abs(stuffData.data - infoUpd.prev) >= (infoUpd.prev / 2);
        if (stuffData.data !== infoUpd.prev) {
            if ( calcResult ) {
                stuffData.img.src = "img/yelow.png";
            } else {
                stuffData.img.src = "img/green.png";
            }
        }
    }
    infoUpd.prev = stuffData.data; 
}

compareStuff( 'Apple' );
compareStuff( 'Banana' );