简体   繁体   English

如何优化此数据Feed函数中的if语句?

[英]How can I optimize the if statements in this data feed function?

Is there a more efficient way to write the below if statements & preserve the exact same effect? 有没有更有效的方式编写以下if语句并保持完全相同的效果?

Let's say this dataRequest function runs from within in an interval that triggers it every 5 seconds. 假设此dataRequest函数在每5秒触发一次的间隔内运行。 There is fresh data in dataRequest each time it is requested. 每次请求时,dataRequest中都会有新数据。 As it exists right now, this code assigns a value to the latest data.item_1 - then (after each iteration) passes the value from the current result to a history variable before reassigning the current. 现在,此代码为最新数据分配一个值。item_1-然后(在每次迭代之后)将值从当前结果传递到历史记录变量,然后再重新分配当前值。 This creates a history of the results, up to 6. 这将创建结果的历史记录,最多6个。

It feels inefficient & redundant to do it like this, but I wasn't able to come up with another way. 这样做是感觉效率低下和多余的,但我无法提出另一种方法。 Seems unsustainable, esp if you have something like 100 history states... 似乎不可持续,尤其是如果您有类似100个历史状态的信息...

let result_current,
    result_prev_1,
    result_prev_2,
    result_prev_3,
    result_prev_4,
    result_prev_5,
    result_prev_6,
    result_prev_7;
//
const dataRequest = function() {    
    let request;
    request = new XMLHttpRequest();
    request.open('GET', 'https://somedatafeed.com', true);
    request.onload = function() {
      if (request.status >= 200 && request.status < 400) {      
      data = JSON.parse(request.response)      
      // ...          
      if (result_prev_6) { result_prev_7 = result_prev_6; }
      if (result_prev_5) { result_prev_6 = result_prev_5; }
      if (result_prev_4) { result_prev_5 = result_prev_4; }
      if (result_prev_3) { result_prev_4 = result_prev_3; }
      if (result_prev_2) { result_prev_3 = result_prev_2; }
      if (result_prev_1) { result_prev_2 = result_prev_1; }
      if (result_current) { result_prev_1 = result_current; }
      result_current = data.item_1.result;
    } else {
      // error
    }
  };
  request.send();        
}  

Any thoughts? 有什么想法吗?

Add to an array instead. 而是添加到数组。

const resultArr = [];
const dataRequest = function() {
  // ...
    const data = JSON.parse(request.response);
    resultArr.unshift(data.item_1.result); // or use push
  }
  // ...

Then you can access the most recent result via resultArr[0] , and the older results in the other indicies. 然后,您可以通过resultArr[0]访问最新结果,而其他索引中的旧结果。

storing results in an array might be easier 将结果存储在数组中可能会更容易

let result = new Array(8);
//
const dataRequest = function() {    
    let request;
    request = new XMLHttpRequest();
    request.open('GET', 'https://somedatafeed.com', true);
    request.onload = function() {
      if (request.status >= 200 && request.status < 400) {      
      data = JSON.parse(request.response)      
      // ...
      for(var i = result.length; i > 0; i--){
          if(result[i]) { result[i] = result[i-1]}
      }

      result[0] = data.item_1.result;
    } else {
      // error
    }
  };
  request.send();        
}  

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

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