使用阈值修改数组的值,而不使用if语句。 JavaScript的

时间:2018-05-02 00:17:10

标签: javascript arrays performance if-statement

我正在考虑以更有效的方式解决这个问题。

我有一大堆整数

[170,158,147,139,134,132,133,136,141,.....]

我的计算阈值为132& 137

我想要做的是修改我的数组中的任何数字< 132要设置为其他值,例如100。我的数组中的任何数字> 137设置为不同的值150

写一篇蠢货很容易

for (i < array.length)
    if(array[i] < 132)
        array[i] = 100;
    if(array[i] > 137)
        array[i] = 150

但是对于我的阵列(20k +)的大小,拥有这么多ifs需要很长时间。

我需要保留数组的顺序,因此排序不适用于此。

也许某种类型的按位操作可以解决这个问题。

2 个答案:

答案 0 :(得分:0)

试试这个,它可能会更快;

var given=[170,158,147,139,134,132,133,136,141,.....];
var result=given.map(x=> x<132 ? 100 : (x>137 ? 150 : x));

答案 1 :(得分:0)

我不确定你的for循环会发生什么,但是如果你使用常规for循环(即for (i=0; i < array.length; i++) {},它比使用for (i in array) {}的速度要快得多。看看它的速度有多快正在使用长度为1,000,000的数组:

var bigData = [];
for (var i = 0; i < 1000000; i++) {
  bigData[i] = i;
}

console.time('TEST1');
for (i=0; i < bigData.length; i++) {
    if(bigData[i] < 132)
        bigData[i] = 100;
    if(i > 137)
        bigData[i] = 150
}
console.timeEnd('TEST1');

console.time('TEST2');
for (i in bigData) {
    if(i < 132)
        i = 100;
    if(i > 137)
        i = 150
}
console.timeEnd('TEST2');