Обновление переменной из сокета

179
13 июля 2017, 02:30

Есть код который складывает данные из массивов

var data = [{ id: 100, chance: 10 }, { id: 100, chance: 30 }, { id: 200, chance: 10 },
            { id: 300, chance: 5 }, { id: 200, chance: 30 }, { id: 100, chance: 15 }];
var result = {};
for (var element of data)
{
  if (result[element.id] == undefined)
    result[element.id] = 0;
  result[element.id] += element.chance;
} 
for (var id in result)
  console.log("id: " + id + ", chance: " + result[id]);

Этот код выполняется только один раз после загрузки страницы - пусть это будет socket.on('load_data',...) Но на страницу так же постоянно приходит и другой сокет запрос socket.on('bet_data',...) Так вот..

Вместе с bet_data приходит data в таком виде data = { id: 400, chance: 10 }.

События получается выглядят вот так:

socket.on('load_data', function(data) {
    var data = [{ id: 100, chance: 10 }, { id: 100, chance: 30 }, { id: 200, chance: 10 },
                { id: 300, chance: 5 }, { id: 200, chance: 30 }, { id: 100, chance: 15 }];
    var result = {};
    for (var element of data)
    {
      if (result[element.id] == undefined)
        result[element.id] = 0;
      result[element.id] += element.chance;
    } 
    for (var id in result)
      console.log("id: " + id + ", chance: " + result[id]);
});
socket.on('bet_data', function(data) {
    var data = { id: 400, chance: 10 };
    // тут нужно сделать сделать обновление переменной result, и (занести/добавить к существующему) новый результат.
});

Надеюсь объяснил понятно..

Answer 1

Простой вариант - сделать переменную result глобальной и вынести код добавления в result в функцию:

var result = {}; 
 
function addToResult(id, chance) 
{ 
  if (result[id] == undefined) 
    result[id] = 0; 
  result[id] += chance; 
} 
 
//socket.on('load_data' 
setTimeout(function() { 
  var data = [{ id: 100, chance: 10 }, { id: 100, chance: 30 }, { id: 200, chance: 10 }, 
              { id: 300, chance: 5 }, { id: 200, chance: 30 }, { id: 100, chance: 15 }]; 
  for (var element of data) 
    addToResult(element.id, element.chance); 
}, 10); 
 
//socket.on('bet_data' 
setTimeout(function() { 
  var data = { id: 400, chance: 10 }; 
  addToResult(data.id, data.chance); 
  //проверка результата 
  for (var id in result) 
    console.log("id: " + id + ", chance: " + result[id]); 
}, 100);

READ ALSO
Почему не входит в чат?

Почему не входит в чат?

Есть такой код:

200
Перехват js события в WKWebView

Перехват js события в WKWebView

Добрый день! Пытаюсь перехватить ЛЮБОЕ onclick событие в WKWebViewВесь сайт работает посредством js запросов, так что в func webView(_ webView: WKWebView, decidePolicyFor...

183
Не работает скрипт jq

Не работает скрипт jq

Добрый день! Есть скрипт:

223
Почему показывает что не закрыта скобка хотя у меня все скобки закрыты? [требует правки]

Почему показывает что не закрыта скобка хотя у меня все скобки закрыты? [требует правки]

Parse error: syntax error, unexpected '{' in X:\home\localhost\www\kbm\adm\event-listenerphp on line 17

172