2014-09-26 2 views
0

고유 한 json 데이터를 수집하려고합니다. 키가 업데이트되면 해당 키가 존재합니다. 그러나 기존 키의 값을 업데이트하는 데는 성공하지 못합니다. fpr_data에서JSON 값을 연관된 키로 업데이트하십시오.

var fpr_data = [{"rfr_id":"7","user_id":"5","fp_id":"10","raw_id":"3","raw_qty":"20.00","raw_wastage":"2","raw_name":"Buttons"}, 
       {"rfr_id":"9","user_id":"5","fp_id":"10","raw_id":"4","raw_qty":"500.00","raw_wastage":"0","raw_name":"Yarn"}, 
       {"rfr_id":"8","user_id":"5","fp_id":"10","raw_id":"5","raw_qty":"2.00","raw_wastage":"1","raw_name":"Needle"}, 
       {"rfr_id":"7","user_id":"5","fp_id":"10","raw_id":"3","raw_qty":"20.00","raw_wastage":"2","raw_name":"Buttons"}]; 

var qty = 2, coll={}, _qty=0.00,_wastage=0.00; 

// Filter and modify JSON data 
$.each(fpr_data, function(i, data) { 
    _qty = data.raw_qty * qty; 
    _wastage = data.raw_wastage * qty; 

    // Next time add on existing keys 
    if(coll[data.raw_id] == data.raw_id) { 
     var q = coll[data.raw_id].qty + _qty; 
     var w = coll[data.raw_id].wastage + _wastage; 

     coll[data.raw_id] = {"qty":q, "wastage":w}; 
    } 
    else { 
     coll[data.raw_id] = {"qty":_qty, "wastage":_wastage}; 
    } 
}); 
console.log(coll); 

것은 거기에 내가 고유 한 ID를 수집 할 raw_id하고 객체에있는 raw_id는 raw_qtyraw_wastage과의 qtywastage를 업데이트합니다. 고유 한 JSON 데이터가 있지만 양과 낭비가 업데이트되지 않습니다. 내가 뭘 잘못 했니? 바이올린에서 같은 코드를 찾아 콘솔에서 결과를 확인할 수 있습니다.

예상 :3에서 qty의 값은 당신이 jQuery를 사용 JSFIDDLE

+0

거기서 조작하는 것은 JSON이 아니라 객체 배열입니다. (문자열로 직렬화되는 경우 JSON 일뿐입니다.) – nnnnnn

+0

@nnnnnn 감사합니다. 올바른 방향으로 나를 가리켜줍니다. JSON에서 조작 할 수 있습니까? –

+0

아니요, 적어도 문자열 조작 일 것이기 때문에 쉽지 않습니다. 당신이하는 것처럼 객체 배열을 가지고있을 때 직접 조작 할 수 있습니다. – nnnnnn

답변

2

아래의 조건은 개체가 이미 배열에있을 때 올바른 비교를 제공하지 않습니다.

경우 (콜 [data.raw_id] == data.raw_id) {

나는 당신이 단지해야한다고 생각 :

경우 (콜 [data.raw_id]) {

내가 이해한다면 당신은 올바르게 example

시도
+0

아, 맞아. 나는 물체와 숫자를 비교하려고 노력했다. –

0

80

수 있으므로 jQuery.extend() 함수를 즐길 수 있어야합니다

var fpr_data = [{"rfr_id":"7","user_id":"5","fp_id":"10","raw_id":"3","raw_qty":"20.00","raw_wastage":"2","raw_name":"Buttons"},{"rfr_id":"9","user_id":"5","fp_id":"10","raw_id":"4","raw_qty":"500.00","raw_wastage":"0","raw_name":"Yarn"},{"rfr_id":"8","user_id":"5","fp_id":"10","raw_id":"5","raw_qty":"2.00","raw_wastage":"1","raw_name":"Needle"}, {"rfr_id":"7","user_id":"5","fp_id":"10","raw_id":"3","raw_qty":"20.00","raw_wastage":"2","raw_name":"Buttons"}]; 
console.log(fpr_data); 
var qty = 2, coll={}, _qty=0.00,_wastage=0.00; 

    // Filter and modify JSON data 
    $.each(fpr_data, function(i, data) { 
     _qty = data.raw_qty * qty; 
     _wastage = data.raw_wastage * qty; 

     // Next time add on existing keys 
     var currentObj = coll[data.raw_id]; // Try not to repeat yourself ;-) 
     if(currentObj == data.raw_id) { 
      var q = currentObj.qty + _qty; 
      var w = currentObj.wastage + _wastage; 
      console.log(data); 
      coll[data.raw_id] = $.extend(data, {"qty":q, "wastage":w}); 
     } 
     else { 
      coll[data.raw_id] = $.extend(data, {"qty":_qty, "wastage":_wastage}); 
     } 
    }); 
console.log(coll); 

I을 이것이 당신이 찾고 있었던 것이기를 바랍니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 제가 원하는 것이 아닙니다. –

관련 문제