2013-07-22 2 views
0

У меня есть массив объектов, как это:Заполните недостающие данные в Javascript

[ 
    { 
     "time": 1, 
     "value": 405.56 
    }, 

    { 
     "time": 2, 
     "value": 407.64 
    }, 

    { 
     "time": 4, 
     "value": 403.26 
    }, 


    { 
     "time": 5, 
     "value": 403.26 
    } 
] 

Однако нет никаких объектов на какое-то время (например, 3 отсутствует в приведенном выше примере).

Для установки значения этих отсутствующих данных в значение по умолчанию найдено this thread. Однако то, что я хочу сделать, это back-fill данные. Например, я хочу создать объект 3, чтобы он имел значение предыдущего объекта (407.64).

Есть ли библиотека Javascript для такого рода манипуляций? Я не хочу сам его кодировать, насколько это возможно.

EDIT: Может быть больше отсутствующих значений, но идентификаторы (time) всегда будут числами.

+0

Coding сами, вероятно, заставит вас получить время, опыт и размер файла. И это очень специфическая потребность, она, вероятно, не существует. – dievardump

+0

Я не думаю, что для этого есть библиотека. Это очень специфическое требование. Поскольку его массив объектов, получив индекс 2, вы можете заполнить новый объект 3 со значением 2. – GoodSp33d

+0

Если вы уверены, что у вас есть только числовой идентификатор, вы можете сделать цикл for и проверить, существует ли соответствующее свойство в вашем массиве, используя https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty. Если это не так, вам нужно вставить предыдущее значение. – eX0du5

ответ

0

WORKING FIDDLE

var test = [ 
    { 
     "time": 1, 
     "value": 405.56 
    }, 

    { 
     "time": 2, 
     "value": 407.64 
    }, 

    { 
     "time": 7, 
     "value": 403.26 
    }, 


    { 
     "time": 12, 
     "value": 403.26 
    } 
] 

function fill() { 
    var tmp = []; 
    for (var i = 0, len = test.length - 1; i < len; i++) { 
     if (test[i]["time"] == test[i+1]["time"] - 1) { 
      tmp.push(test[i]); 
     } else { 
      for (var j = test[i]["time"], l = test[i+1]["time"]; j < l; j++) { 
       tmp.push(test[i]); 
      }; 
     } 
    }; 
    return tmp; 
}; 

function printArray(arr) { 
    for (var i = 0, len = arr.length; i < len; i++) { 
     document.body.innerHTML += "<p>" + i + ": " + JSON.stringify(arr[i]) + "</p>"; 
    } 
}; 

printArray(fill(test)); 
+0

Спасибо за скрипку! –

0

Если вы хотите с яваскрипта кодом попробуйте this-

function fillArray(arr){ 
var i=1; 
while(i<arr.length){ 
    if((arr[i]["time"]*1-arr[i-1]["time"]*1) > 1){ 
    arr.splice(i,0,{"time":i+1, "value": arr[i-1]["value"]}); 

     } 
    i++; 
} 
//console.log(arr); 
return arr; 
} 
Смежные вопросы