2

它看起来很容易,但我有点想弄清楚如何在将 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) ] );

}

我想要完成的是,如果当前thevaluevar 与前一个相同,thevalue那么它将丢弃数据并转到下一个i,直到它返回不同的值。如果使用for循环会很容易,但我不知道推送 json 对象而不是 json 对象的不同方式,也不知道在推送之前for..in使用过滤值。i

4

3 回答 3

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) ] );
}
于 2013-09-10T13:18:10.300 回答
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];
    }
}
于 2013-09-10T13:16:44.160 回答
0

从 MDN 的 Array.indexOf 中提取

创建一个这样的函数

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) ] );
}
于 2013-09-10T13:37:15.187 回答