2016-08-29 4 views
1

У меня есть несколько элементов массива, вложенных друг в друга и обналиченных данных, которые я хочу вызвать, я хочу знать, есть ли способ, которым я могу сделать следующее. Поскольку я хочу уменьшить свое общее количество переменных.оптимизация массива javascript

//function to check for change 
    function dataChange(oldData, newData){ 
    if(oldData > newData){ 
     alert('change'); 
    } 
    } 


//current code 
var num1 = item[key]['b02'][0]; 
var num2 = item[key]['b02'][1]; 
var numOld1 = itemOld[key]['b02'][0]; 
var numOld2 = itemOld[key]['b02'][1]; 

dataChange(num1,numOld1); 


//proposed code 
var num1 = ['b02'][0]; 
var num2 = ['b02'][1]; 

dataChange(item[key].num1, itemOld[key].num1); 
+0

пожалуйста, добавьте содержимое 'item',' 'itemOld' и key' также. –

+0

его действительно долго, но я попробую – Paddy

+1

@Paddy: Смотрите [mcve], акцент на ** минимальный **, но также ** полный **. –

ответ

0

Вам не нужны никакие переменные вообще кроме item, itemOld и key:

dataChange(item[key]['b02'][0], itemOld[key]['b02'][0]); 

, которые также могут быть написаны

dataChange(item[key].b02[0], itemOld[key].b02[0]); 

Но поскольку item[key]['b02'] и item[key]['b02'] являются объекты, вы также можете использовать переменные для ссылки на них, а затем просто используйте [0] и [1]:

var current = item[key]['b02']; 
var old = itemOld[key]['b02']; 

dataChange(current[0], old[0]); 
0

Если вы всегда имеют следующую структуру, можно просто реализовать функцию следующим образом:

function dataChange(x, xk1, xk2, y, yk1, yk2) { 
    return x[xk1][xk2] > y[yk1][yk2]; 
} 

dataChange(item[key], 'b02', 0, itemOld[key], 'b02', 2); 
Смежные вопросы