从一个对象创建另一个对象

Create one object from another

本文关键字:一个对象 创建      更新时间:2023-09-26

我需要从下面的输入中获得输出:

输入格式:

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

以上代码的输出应该是:

specificationName["strong", "weak", "energetic"]事件("123")groupid[" g1 ", " group1 "]

要求类型value应该是字符串数组。我的最终目标是根据字段名对值进行分组。

上面的代码给了我一个结果,当我解析时,它不是一个正确的结果。

试试这个

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

仅当对象排序:

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

目前没有测试,但我想从

开始。

尝试下面的函数来处理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);

感谢Valijon用javascript更新数组值。

只是更改了Valijon给出的更新行。我的代码正常工作

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