繁体   English   中英

javascript函数增加数组

[英]javascript function to increment array

我正在使用一个函数来增加数组中的值,具体取决于传递给它的值。

function depth(x) {
    var dep = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

    if (x < 10) {
        var deps = dep[0];
        dep[0] = deps + 1;

    } else if (x >= 10 && x < 20) {
        var deps = dep[1];
        dep[1] = deps + 1;

    } else if (x >= 20 && x < 30) {
        var deps = dep[2];
        dep[2] = deps + 1;

    } else if (x >= 30 && x < 40) {
        var deps = dep[3];
        dep[3] = deps + 1;

    } else if (x >= 40 && x < 50) {
        var dep2 = dep[4];
        dep[4] = deps + 1;

    } else if (x >= 50 && x < 60) {
        var deps = dep[5];
        dep[5] = deps + 1;

    } else if (x >= 60 && x < 70) {
        var deps = dep[6];
        dep[6] = deps + 1;

    } else if (x >= 70 && x < 80) {
        var deps = dep[7];
        dep[7] = deps + 1;

    } else if (x >= 80 && x < 90) {
        var deps = dep[8];
        dep[8] = dep2 + 1;

    } else if (x >= 90 && x < 100) {
        var deps = dep[9];
        dep[9] = dep2 + 1;

    } else if (x >= 100 && x < 110) {
        var deps = dep[10];
        dep[10] = deps + 1;


    } else if (x >= 110 && x < 120) {
        var deps = dep[11];
        dep[11] = deps + 1;

    } else if (x >= 120 && x < 130) {
        var deps = dep[12];
        dep[12] = deps + 1;

    } else if (x >= 130 && x < 140) {
        var deps = dep[13];
        dep[13] = deps + 1;

    } else if (x >= 140 && x < 150) {
        var dep2 = dep[14];
        dep[14] = deps + 1;

    } else if (x >= 150 && x < 160) {
        var deps = dep[15];
        dep[15] = deps + 1;


    } else if (x >= 160 && x < 170) {
        var deps = dep[16];
        dep[16] = deps + 1;

    } else if (x >= 170 && x < 180) {
        var deps = dep[17];
        dep[17] = deps + 1;

    } else if (x >= 180 && x < 190) {
        var deps = dep[18];
        dep[18] = dep2 + 1;

    } else if (x >= 190 && x < 200) {
        var deps = dep[19];
        dep[19] = dep2 + 1;

    } else {
        var dep2 = dep[10];
        dep[20] = dep2 + 1;

    }

}

我的问题是,是否有更清洁的方法来执行此操作,或者我需要为每个可能的变量编写else if语句?

除了您的else语句外,这里还有一个明确的模式。 因此,最简单的方法是对此进行例外处理,然后将其余部分放在一起。

function depth(x) {
    var dep = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    if (x >= 200) { // case for anything above 200
       return dep[20] = dep[10] + 1;
    }
    dep[Math.floor(x/10)]++;
}

你的其他情况使它变得有点混乱,但总的来说,这是一种内线的东西。

重复图案的问题

问题是你重复了很多,因为你的if/else语句中的代码有很多相似之处。

当您在代码中找到类似之处时,以某种方式“合并”它们通常很有用。

例如,您可能会注意到,除了10, 20, 30等值之外,语句中的代码完全相同。 然后,尝试确定使那10, 20, 30, 40依赖于替换它们的唯一变量的方法。

在这种情况下,很容易猜到,因为每次您使用的数组键等于您的数字除以10。借助于JavaScript内置对象Math的某些方法,这是一些问题单行语句:

function depth(x) {
    var dep = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

    var nb = Math.floor(x / 10);
    nb = Math.max(nb, 20);
    dep[nb]++;
}

关于数学函数的一些资源:

Mozilla开发人员网络上的Math.max

Mozilla开发人员网络上的Math.floor

JavaScript Math内置对象

尝试这个:

var index = Math.floor(x/10);
var deps = dep[index];
dep[index] = deps + 1;

这样的事情应该可以解决问题,但是由于您的dep是本地的并且从不返回,因此该功能将无济于事。

function depth(x) {
    var dep = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    if(x < 200) {
      var index = Math.floor(x/10);
      dep[index]++;
    } else {
      dep[20] = dep[10] + 1;
    }
}

无论如何,正如你可能猜到的那样,当你看到一个模式时,你可以将它简化为更简单的东西。

如果范围为10 ,则表示您可以将数字除以10以获得索引。 您必须使用Math.floor因为1/2 => 0.5并且它将尝试将值添加到不存在的索引“0.5”。 Math.floor会将数字截断为最小值。 在我们的例子中, 0,1,2,3,4...

没有全局规则,但是当您看到一个重复的模式时,您只需找出每种情况之间的共同点,便能够找到将大多数情况转换为共同点的简化方法。 ifs一切。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM