문제

숫자 값을 제외하고는 JavaScript에 두 개의 JSON 객체가 있습니다. 다음과 같이 보입니다.

var data = {
  "eth0":{"Tx":"4136675","Rx":"13232319"},
  "eth1":{"Tx":"4","Rx":"0"},
  "lo":{"Tx":"471290","Rx":"471290"}
}

var old = {
  "eth0":{"Tx":"4136575","Rx":"13232219"},
  "eth1":{"Tx":"4","Rx":"0"},
  "lo":{"Tx":"471290","Rx":"471290"}
}

"data"라는 하나의 객체에는 현재 값이 있으며 "Old"라는 다른 객체는 1 초 전과 동일한 값을 갖습니다. JSON 객체 만 출력하고 싶습니다. 변화 값에서 네트워크 인터페이스에서 데이터 처리량을 계산할 수 있습니다.

var throughput = {
  "eth0":{"Tx":"100","Rx":"100"},
  "eth1":{"Tx":"0","Rx":"0"},
  "lo":{"Tx":"0","Rx":"0"}
}

JSON 데이터를 가로 지르는 방법을 잘 모르겠습니다. 여러 인터페이스에 적합 할 수 있습니다.

누구든지 나에게 손을 빌려 줄 수 있습니까? 미리 감사드립니다

도움이 되었습니까?

해결책

부모 및 자식 객체 속성을 통해 반복 할 수 있습니다.

var diff = {};
for(var p in data){
  if (old.hasOwnProperty(p) && typeof(data[p]) == 'object'){
    diff[p] = {};
    for(var i in data[p]){
      if (old[p].hasOwnProperty(i)){
        diff[p][i] = data[p][i] - old[p][i];
      }
    }
  }
}

다른 팁

JavaScript에서 개체를 반복하기위한 기본 전제는 그렇습니다.

var whatever = {}; // object to iterate over
for ( var i in whatever )
{
  if ( whatever.hasOwnProperty( i ) )
  {
     // i is the property/key name
     // whatever[i] is the value at that property
  }
}

체커를 고치는 것은 그리 어렵지 않습니다. 재귀가 필요합니다. 나는 그것을 당신이나 다른 Soer의 운동으로 남겨 두겠습니다.

어쩌면 그것은 이미 충분히 대답했지만 내 뻔뻔한 플러그를 추가하겠습니다 :) json (실제로 JavaScript 객체 또는 배열 구조) Diff & Patch Library I Github에서 오픈 소스 :

https://github.com/benjamine/jsondiffpatch

클라이언트 (테스트 페이지 확인) 및 서버 측면을 사용할 수있는 Diffs (JSON 형식 및 작은 발자국)를 생성하고 현재 사용하면 사용합니다. http://code.google.com/p/google-diff-match-patch/ 긴 문자열의 경우 자동으로.

~을 체크하다 데모 작동 방식을 확인하는 페이지.

이것은 비슷한 문제를 다룰 때 나에게 속임수를 일으켰습니다. 첫 번째에 비해 두 번째 차이를 얻습니다.

var first  = originalObj;
var second = modifiedObj;
var diff   = {};

var differ = function(first, second, result) {
    var i = 0;
    for (i in first) {
        if (typeof first[i] == "object" && typeof second[i] == "object") {
            result[i] = differ(first[i], second[i], {});
            if (!result[i]) delete result[i];
        } else if (first[i] != second[i]) {
            result[i] = second[i];
        }
    }
    return isEmpty(result) ? undefined : result;
}

differ(old_conf, new_conf, diff);

코드는 약간 특별한 경우이지만 일반적인 아이디어를 얻습니다 : P

객체 Traversal 모듈을 사용할 수 있습니다 nervgh/object-traverse 이것을하기 위해.

var result = {}
Object.traverse(old, function(node, value, key, path) {
  var resultObject = result
  for(var n=0; n<path.length-1; n++) {
    resultObject = resultObject[path[n]]
  }
  resultObject[key] = value
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top