在将JSON对象推送到Javascript之前过滤数组

时间:2013-09-10 13:10:30

标签: javascript json

它看起来很简单,但在将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 var与之前的thevalue相同,那么它将丢弃数据并转到下一个i,直到它返回不同的值。 如果使用for循环会很容易,但我不知道推送json对象而不是for..in的不同方式,也不知道在推送它之前使用过滤i值。

3 个答案:

答案 0 :(得分: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) ] );
}

答案 1 :(得分: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];
    }
}

答案 2 :(得分: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) ] );
}