2013-09-10 2 views
2

он выглядит легко, но я как бы застрял в попытке выяснить, как фильтровать данные, прежде чем вставлять json-данные в массив javascript.Фильтр-массив перед нажатием JSON Объект на Javascript

//push data into javascript array [timestamp,value] 
dataJSON2 = []; 
for (i in parsed2) { 

    if (parsed2[i].value == 'open' || parsed2[i].value == 'true' ) { 
     thevalue = 1; 
    } else if (parsed2[i].value == 'closed' || parsed2[i].value == 'false') { 
     thevalue = 0; 
    } else { 
     thevalue = parsed2[i].value; 
    } 
    dataJSON2.push([ (parsed2[i].timestamp), 
    parseFloat (thevalue) ]); 

} 

, что я пытаюсь сделать, если текущий thevalue вар то же самое с предыдущим thevalue тогда было бы отбросить данные и перейти к следующему i, пока он не вернется другое значение. Было бы легко использовать цикл for, но я не знаю другого способа нажимать json-объект, а не for..in, а также использовать фильтрацию i значение перед его нажатием.

+0

Вы никогда не проверяете, соответствует ли предыдущее значение '' равно 'parsed2 [i] .value' где угодно, насколько я могу судить. – crush

+0

что вы ожидаете в данныхJSON2? –

+0

Возможно, если бы вы могли показать кусок JSOn, было бы лучше – thefourtheye

ответ

3
var dataJSON2 = [], previous; 
for (i in parsed2) { 
    if (parsed2[i].value === 'open' || parsed2[i].value === 'true' ) { 
     thevalue = 1; 
    } else if (parsed2[i].value === 'closed' || parsed2[i].value === 'false') { 
     thevalue = 0; 
    } else { 
     thevalue = parsed2[i].value; 
    } 
    if (previous === thevalue) continue; 
    previous = thevalue; 
    dataJSON2.push([ (parsed2[i].timestamp), parseFloat (thevalue) ]); 
} 
+0

upvote для ненавижу тихих downvoters –

+0

@MoazzamKhan Спасибо yaar :) – thefourtheye

+0

: D он мог бы сбалансировать вашу потерю –

1

Это проверить, будет для предыдущего значения с текущим значением и пропустить его, если они такие же

dataJSON2 = []; 

var lastVal = parsed2 && parsed2[0]; 
for (var i = 1; i < parsed2.length; i++) { 
    if (lastVal !== parsed2[i].value) { 
     dataJSON2.push([(parsed2[i].timestamp), parseFloat(parsed2[i].value)]); 
     lastVal = parsed2[i]; 
    } 
} 
+0

@Downvoter - downvote ?? –

+0

Я знаю, что чувствую брата. Всего несколько минут назад кто-то отказался от моего другого ответа, не указав никаких причин: «( – thefourtheye

+0

Точно так же случилось со мной только сейчас. Кто-то ответил на мои 4 других ответа. –

0

Выдержки из Array.indexOf from MDN

Создайте функцию, как этот

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
    'use strict'; 
    if (this == null) { 
     throw new TypeError(); 
    } 
    var n, k, t = Object(this), 
     len = t.length >>> 0; 

    if (len === 0) { 
     return -1; 
    } 
    n = 0; 
    if (arguments.length > 1) { 
     n = Number(arguments[1]); 
     if (n != n) { // shortcut for verifying if it's NaN 
     n = 0; 
     } else if (n != 0 && n != Infinity && n != -Infinity) { 
     n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
     } 
    } 
    if (n >= len) { 
     return -1; 
    } 
    for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) { 
     if (k in t && t[k] === searchElement) { 
     return k; 
     } 
    } 
    return -1; 
    }; 
} 

и использовать indexOf следующим образом:

if (dataJSON2.indexOf([ (parsed2[i].timestamp), parseFloat (thevalue) ]) == -1){ 
    dataJSON2.push([ (parsed2[i].timestamp), parseFloat (thevalue) ]); 
} 
Смежные вопросы