Вы можете хранить вычисленную строку JSON объектов в отображенном массиве
const comparison = data.map(JSON.stringify); // in order string based values for direct comparison
Позже в коде вы можете сравнить с этими значениями
data.forEach((obj, index) => {
// if they do match, skip
if (JSON.stringify(obj) === comparison[index]) return;
// they don't match, update comparison value
comparison[index] = JSON.stringify(obj);
// update VUE state and other things here
})
Таким образом, вам нужно толькообновить обновленные значения, и только когда-либо нужно рассчитать значения сравнения.Это работает, даже если объект имеет определенное обновленное поле, но все еще является тем же объектом (который прошел бы тест на равенство object === object
, даже если значение обновилось).
Еще один более сложный пример вращается вокруг прокси или просмотракаждый установщик объектов запускает изменения всякий раз, когда они обновляются на месте, но на всю жизнь я все еще не понимаю прокси, верно ...
А что, если массив полей изменит размер?
Хотя это работает, если размер данных никогда не изменяется, если размер массива данных изменяется ... он все равно будет работать, поскольку в соответствующем индексе будет неопределенное значение, в результате чего сравнение строк вернет false.Однако было бы лучше добавить его в форму, а затем в конце с простой модификацией приведенного выше кода:
if (comparison[index] === undefined) {
// add the form to the field, it'll add in order
}
// they don't match, update comparison value
...