2014-07-08 49 views
0

一個對象我需要從以下輸入的輸出:創建從另一個

輸入格式:

var inputParams = { 
    'inputDetails' :[ 
     { 'field' : 'specificationName', 'value' : 'strong'}, 
     { 'field' : 'specificationName', 'value' : 'weak'}, 
     { 'field' : 'specificationName', 'value' : 'energetic'} 
     { 'field' : 'incident', 'value' : '123'}, 
     { 'field' : 'groupId', 'value' : 'g1'}, 
     { 'field' : 'groupId', 'value' : 'group1'}, 
    ] 
}; 

輸出格式:

var outputParams = { 
    'paramDetail': [ 
     { 'field' : 'specificationName', 'value' : [ 'strong ', 'weak' ,'energetic']}, 
     { 'field' : 'incident', 'value' : ['123']}, 
     { 'field' : 'groupId', 'value' : ['g1', 'group1']}, 
    ] 
}; 

我曾嘗試的邏輯是:

var changedList = { 
        changedJsonObject : [] 
        }; 
var i = 0 ; 
var prev; 
var firstTime = true; 
var index = 0; 
var facetfields = ['strong', 'weak' ,'energetic']; 
do { 
    if (!params[index].field.localeCompare(facetFields[i])) { 
     if (prev == null) { 
      prev = params[index].field; 
     } 
     console.log(index + " " + params[index].field + " " + params[index].value); 
     if (!prev.localeCompare(params[index].field)) { 
      if (firstTime) { 
       console.log("create"); 
       outputParams.paramDetail.push({ 
        "field": params[index].field, 
        "value": [params[index].value] 
       }); 
       firstTime = false; 
      } else { 
       console.log("update"); 
       for (var tempInd = 0; tempInd < outputParams.paramDetail.length; tempInd++) { 
        if (!outputParams.paramDetail[tempInd].field.localeCompare 
         (params[index].field)) { 
         outputParams.paramDetail[tempInd].value = 
          outputParams.paramDetail[tempInd].value + "," + params[index].value; 
         break; 
        } 
       } 
      } 
     } 
    } else { 
     i++; 
     index = index - 1; 
     firstTime = true; 
     prev = null; 
    } 
} 
index++; 
} 
while (index < params.length); 
for (var s in outputParams.paramDetail) { 
    console.log(outputParams.paramDetail[s].field); 
    console.log(outputParams.paramDetail[s].value); 
} 

輸出o F中的上述代碼應爲:

specificationName [ 「強」, 「弱」, 「有活力」] 入射 [ 「123」] GROUPID [ 「G1」, 「組1」]

要求是類型value應該是一個字符串數組。我的最終目標是根據字段名稱對值進行分組。

上面的代碼給了我一個結果,當我解析是不正確的結果。

+1

'上面的代碼給我一個結果,當我分析是不正確的result.'這是什麼給你?發佈。 –

回答

0

由於Valijon使用JavaScript用於更新數組值。

剛剛更改了Valijon給出的更新行。我的代碼按預期工作。

outputParams.paramDetail[tempInd].value.push(arr.jsonList1[index].value); 
0

這將工作僅當對象排序

var outputparams = { 'paramDetail': [] }; 
var lastGroup = ""; 

for (var n = 0; n < inputParams.inputDetails.length; n++) 
{ 
    if (lastGroup != inputParams.inputDetails[n].field) 
    { 
     outputparams.paramDetail.push({ 'field': inputParams.inputDetails[n].field, 'value': [] }); 
     lastGroup = inputParams.inputDetails[n].field; 
    } 
    var currentField = outputparams.paramDetail.length -1; 

    outputparams.paramDetail[currentField].value.push(inputParams.inputDetails[n].value); 

} 

目前沒有測試,但是這就是我會開始。

0

嘗試此

var inputParams = { 
    "inputDetails" : [ 
     { "field" : "specificationName", "value" : "strong"}, 
     { "field" : "specificationName", "value" : "weak"}, 
     { "field" : "specificationName", "value" : "energetic"}, 
     { "field" : "incident", "value" : "123"}, 
     { "field" : "groupId", "value" : "g1"}, 
     { "field" : "groupId", "value" : "group1"} 
    ] 
}; 

var outputParams = { 
    "paramDetail" : [] 
}; 

for(i=0;i<inputParams.inputDetails.length;i++){ 
    exist = false; 
    for(j=0;j<outputParams.paramDetail.length;j++){ 
     if(outputParams.paramDetail[j].field == inputParams.inputDetails[i].field){ 
      outputParams.paramDetail[j].value.push(inputParams.inputDetails[i].value); 
      exist = true; 
      break; 
     } 
    } 
    if(!exist){ 
     outputParams.paramDetail.push({"field" : inputParams.inputDetails[i].field, "value" : [inputParams.inputDetails[i].value]}); 
    } 
} 

console.log(outputParams); 
+0

謝謝。我已經用完你的代碼來更新類型值和我的邏輯工作。 但是你的邏輯又給出了相同的列表 – buddingGirl

0

試試下面的函數來處理inputParams

var process = function (input) { 
    var results = {}; 
    input.inputDetails.forEach(function (value, key) { 
     if (!(value.field in results)) results[value.field] = []; 
     results[value.field].push(value.value); 
    }); 
    var output = { paramDetail : [] }; 
    for (key in results) { 
     output.paramDetail.push({ 
      field: key, 
      value: results[key] 
     }); 
    } 
    return output; 
}; 

var outputParams = process(inputParams);