从一个对象创建另一个对象
Create one object from another
我需要从下面的输入中获得输出:
输入格式: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);
相关文章:
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 为json对象创建一个动态表
- 用javascript创建另一个对象的实例
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- Mongoose模式:强制创建一个对象数组
- 是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用
- 有没有一种方法可以创建一个对象并同时为其指定一个动态特性
- javascript创建一个对象来打印数组对象
- 从另一个JSON对象创建JSON对象
- 你能在Javascript中创建一个对象而不声明每个值吗,以及如何
- 如何创建一个对象,其中对象本身是一个函数
- 使用拆分字符串的数组创建一个对象
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- 从一个对象创建多个“选择”选项
- 如何在js中使用一个对象创建多个矩形?如何在不同的x轴和y轴上做出它们
- AngularJS/JavaScript从另一个对象创建一个新对象
- 从一个对象创建另一个对象
- 从另一个对象创建一个Object数组
- 在没有javascript的情况下从一个对象创建一个弹出窗口