Изменение значений массива с пороговым значением без использования операторов if. Javascript - PullRequest
0 голосов
/ 02 мая 2018

Я думаю о способе решить эту проблему более эффективным способом.

У меня есть большой массив целых чисел

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

У меня есть расчетные пороговые значения 132 & 137

То, что я хочу сделать, это изменить любые числа в моем массиве, которые <<code>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 голосов
/ 02 мая 2018

Я не уверен, что происходит с вашим циклом 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');
0 голосов
/ 02 мая 2018

Попробуйте, это может быть быстрее;

var given=[170,158,147,139,134,132,133,136,141,.....];
var result=given.map(x=> x<132 ? 100 : (x>137 ? 150 : x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...