Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Можно ли запомнить предыдущее значение массива без сохранения в переменную? (https://javascript.ru/forum/misc/74447-mozhno-li-zapomnit-predydushhee-znachenie-massiva-bez-sokhraneniya-v-peremennuyu.html)

Artur_Hopf 13.07.2018 10:51

Можно ли запомнить предыдущее значение массива без сохранения в переменную?
 
Добрый день, допусти я получаю объект в виде числа:
var data = {number:1};

Я обновляю информацию об объекте методом setInterval;
function getData(){
$.getJSON('getData', function(data) {
       //data = {number:1}
}); 
}

setInterval(function() {
   getData(); 
}, 1000);


Теперь вопрос, можно ли не сохраняя информацию в отдельную переменную узнавать изменилось ли число в объекте?

Для пояснения вопроса, сейчас для понимания изменилось ли значение в объекте, я делаю так:
var data1 = [];
function getData(){
$.getJSON('getData', function(data) {
       setTimeout (function() {              
         data1 = data[0].number;
      },1000);
      if(data[0].number != data1[0]){
         //значит значение изменилось
      }
}); 
}

setInterval(function() {
   getData(); 
}, 2000);


То есть прост записываю это же значение в другую переменную секундой позже.

ksa 13.07.2018 11:14

Цитата:

Сообщение от Artur_Hopf
можно ли не сохраняя информацию в отдельную переменную узнавать изменилось ли число в объекте?

Можно прямо в этом объекте записать сам факт изменения... Или сохранить старое значение...

Artur_Hopf 13.07.2018 11:21

ksa,
А как отследить чтобы записать сам факт изменения?

Nexus 13.07.2018 11:34

Artur_Hopf, можно установить сеттер на свойство или свойства.
У Object'а есть экспериментальный метод "observe", его теоретически тоже можно использовать.

Artur_Hopf 13.07.2018 11:49

Nexus,
Думаю оставлю все как есть, нормально отрабатывает =)

Белый шум 14.07.2018 00:37

Цитата:

Сообщение от Artur_Hopf (Сообщение 489583)
То есть прост записываю это же значение в другую переменную секундой позже.

Что это за изврат с таймаутом? Можно проще и надёжней:
var data1 = [];
function getData(){
$.getJSON('getData', function(data) {
      if(data[0].number != data1[0]){
         //значит значение изменилось
*!*
         data1 = data[0].number; // раз изменилось, значит сохраняем новое значение
*/!*
      }
}); 
}

Artur_Hopf 16.07.2018 08:06

Белый шум,
Без таймаута эти значения всегда будут равны =)

j0hnik 16.07.2018 08:29

var b={number:1};
	setInterval(function(){
		var a = {number:Math.floor(Math.random()*3)}; // меняем значение от 0 до 2
		console.log(a,b);
		console.log(a.number==b.number);
		b.number = a.number;
	},1000);


изучите внимательно конструкцию в b.number сохраняем значение a.number после проверок и манипуляций, за счет этого при следующем вызове b.number помнит пред идущее значение a.number

Artur_Hopf 17.07.2018 10:19

j0hnik,
Хитро, постараюсь применить, спасибо :yes: :thanks:

ruslan_mart 17.07.2018 10:50

Nexus, observe вроде как выпилили уже.


Часовой пояс GMT +3, время: 10:19.