简体   繁体   English

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

[英]Filter Array Before Push JSON Object to Javascript

it looks like easy but I kind of stuck in trying to figure out how to filter data before pushing json data into javascript array. 看起来很简单,但是我有点想尝试在将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) ] );

}

what I am trying to accomplish is if current thevalue var is the same with the previous thevalue then it would discard the data and go to the next i until it return different value. 我试图做到的是,如果目前的thevalue变种相同与前thevalue那么这将丢弃该数据并进入下一个i ,直到它返回不同的值。 It would be easy if using for looping but I don't know different way to push json object rather than for..in , nor to use filtering i value before pushing it. 如果使用for循环会很容易for但是我不知道以其他方式推送json对象,而不是for..in ,也不知道在推送之前使用过滤i值。

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) ] );
}

This would check for previous value with the current value and skip it if they are same 这将检查当前值的先前值,如果相同则跳过它

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];
    }
}

Extracted from Array.indexOf from MDN 从MDN的Array.indexOf中提取

Create a function like this 创建一个这样的功能

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;
  };
}

and use indexOf like this 并像这样使用indexOf

if (dataJSON2.indexOf( [ (parsed2[i].timestamp), parseFloat (thevalue) ] ) == -1){
    dataJSON2.push( [ (parsed2[i].timestamp), parseFloat (thevalue) ] );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM