我有一个如下所示的数组
[{
"IM_Id":1,
"IM_Name":"Hello",
"ItemNumber":2001,
"FE_Id":2,
"FE_Name":"Wall",
"FE_Code":"XYZ",
"FC_Id":[2,3],
"FC_Name":["ABC","PQR"],
"FC_Value":[9,7],
"OC_Id":6,
"OC_Name":"Rai",
"OC_Price":"$30",
"CH_Id":4,
"CH_Name":"Sen",
"CH_Code":"LMN",
"CO_Id":[5,9],
"CO_Name":["xyz","pqr"],
"CO_Value":["qqq","LMN"]
},
{
"IM_Id":2,
"IM_Name":"World",
"ItemNumber":2002,
"FE_Id":3,
"FE_Name":"WallMart",
"FE_Code":"009F",
"FC_Id":[4,5],
"FC_Name":["ABCD","PQRS"],
"FC_Value":[4,2],
"OC_Id":7,
"OC_Name":"Raj",
"OC_Price":"$60",
"CH_Id":7,
"CH_Name":"Ken",
"CH_Code":"IJK"
}]
你可以看到FC_Id,FC_Name,FC_Value有2个元素,这3个参数实际上是相关的。 同样,所有与CO前面的参数都具有相同的模式。
我希望我的结果数组应该逐个考虑数组的每个元素。
因此,对于数组的第一个元素,它应该考虑FC_Id,FC_Name,FC_Value,CO_Id,CO_Name和CO_Value的逐个元素。
它实际上应该考虑子阵列和主阵列的所有元素。 因此我的结果应该是以下内容
[{
"IM_Id":1,
"IM_Name":"Hello",
"ItemNumber":2001,
"FE_Id":2,
"FE_Name":"Wall",
"FE_Code":"XYZ",
"FC_Id":2, //Here it took the first element
"FC_Name":"ABC", // //Here it took the first element
"FC_Value":9, ////Here it took the first element
"OC_Id":6,
"OC_Name":"Rai",
"OC_Price":"$30",
"CH_Id":4,
"CH_Name":"Sen",
"CH_Code":"LMN",
"CO_Id":5,
"CO_Name":"xyz",
"CO_Value":"qqq"
},
{
"IM_Id":1,
"IM_Name":"Hello",
"ItemNumber":2001,
"FE_Id":2,
"FE_Name":"Wall",
"FE_Code":"XYZ",
"FC_Id":3, //Here it took the second element
"FC_Name":"PQR", //Here it took the second element
"FC_Value":7,//Here it took the second element
"OC_Id":6,
"OC_Name":"Rai",
"OC_Price":"$30",
"CH_Id":4,
"CH_Name":"Sen",
"CH_Code":"LMN",
"CO_Id":9,
"CO_Name":"pqr",
"CO_Value":"LMN"
},
{
"IM_Id":2,
"IM_Name":"World",
"ItemNumber":2002,
"FE_Id":3,
"FE_Name":"WallMart",
"FE_Code":"009F",
"FC_Id":4,
"FC_Name":"ABCD",
"FC_Value":4,
"OC_Id":7,
"OC_Name":"Raj",
"OC_Price":"$60",
"CH_Id":7,
"CH_Name":"Ken",
"CH_Code":"IJK",
"CO_Id":"-",
"CO_Name":"-",
"CO_Value":"-"
},
{
"IM_Id":2,
"IM_Name":"World",
"ItemNumber":2002,
"FE_Id":3,
"FE_Name":"WallMart",
"FE_Code":"009F",
"FC_Id":5,
"FC_Name":"PQRS",
"FC_Value":2,
"OC_Id":7,
"OC_Name":"Raj",
"OC_Price":"$60",
"CH_Id":7,
"CH_Name":"Ken",
"CH_Code":"IJK",
"CO_Id":"-", // as there's no element here we are inputting a '-'
"CO_Name":"-",
"CO_Value":"-"
}
]
另外,请注意,因为项目编号2002没有CO_值,所以放置" - "。 数组中还会有更多其他参数,我需要一些动态逻辑来创建结果数组
答案 0 :(得分:0)
这样的事情:
let data = [{"IM_Id":1,"IM_Name":"Hello","ItemNumber":2001,"FE_Id":2,"FE_Name":"Wall","FE_Code":"XYZ","FC_Id":[2,3],"FC_Name":["ABC","PQR"],"FC_Value":[9,7],"OC_Id":6,"OC_Name":"Rai","OC_Price":"$30","CH_Id":4,"CH_Name":"Sen","CH_Code":"LMN","CO_Id":[5,9],"CO_Name":["xyz","pqr"],"CO_Value":["qqq","LMN"]},{"IM_Id":2,"IM_Name":"World","ItemNumber":2002,"FE_Id":3,"FE_Name":"WallMart","FE_Code":"009F","FC_Id":[4,5],"FC_Name":["ABCD","PQRS"],"FC_Value":[4,2],"OC_Id":7,"OC_Name":"Raj","OC_Price":"$60","CH_Id":7,"CH_Name":"Ken","CH_Code":"IJK"}];
let result = [].concat(...data.map(r =>
(Array.isArray(r.FC_Id) ? r.FC_Id :
Array.isArray(r.CO_Id) ? r.CO_Id :
[0]
).map((_, i) =>
Object.assign({}, r, {
FC_Id: r.FC_Id ? r.FC_Id[i] : "-",
FC_Name: r.FC_Name ? r.FC_Name[i] : "-",
FC_Value: r.FC_Value ? r.FC_Value[i] : "-",
CO_Id: r.CO_Id ? r.CO_Id[i] : "-",
CO_Name: r.CO_Name ? r.CO_Name[i] : "-",
CO_Value: r.CO_Value ? r.CO_Value[i] : "-",
})
)
));
console.log(result);

答案 1 :(得分:0)
这是实现此目的的片段。如果需要将值作为数组处理更多属性,只需将它们添加到props
数组:
let props = ["FC_Id", "FC_Name", "FC_Value", "CO_Id", "CO_Name", "CO_Value"]
示例代码段
let arr = [{
"IM_Id": 1,
"IM_Name": "Hello",
"ItemNumber": 2001,
"FE_Id": 2,
"FE_Name": "Wall",
"FE_Code": "XYZ",
"FC_Id": [2, 3],
"FC_Name": ["ABC", "PQR"],
"FC_Value": [9, 7],
"OC_Id": 6,
"OC_Name": "Rai",
"OC_Price": "$30",
"CH_Id": 4,
"CH_Name": "Sen",
"CH_Code": "LMN",
"CO_Id": [5, 9],
"CO_Name": ["xyz", "pqr"],
"CO_Value": ["qqq", "LMN"]
},
{
"IM_Id": 2,
"IM_Name": "World",
"ItemNumber": 2002,
"FE_Id": 3,
"FE_Name": "WallMart",
"FE_Code": "009F",
"FC_Id": [4, 5],
"FC_Name": ["ABCD", "PQRS"],
"FC_Value": [4, 2],
"OC_Id": 7,
"OC_Name": "Raj",
"OC_Price": "$60",
"CH_Id": 7,
"CH_Name": "Ken",
"CH_Code": "IJK"
}
]
function convertArray() {
let result = [];
let props = ["FC_Id", "FC_Name", "FC_Value", "CO_Id", "CO_Name", "CO_Value"]
arr.forEach(function(obj) {
// Assume `FC_Id` array length is the reference array length
obj["FC_Id"].forEach(function(id, $index) {
// Create a clone of original object, so that we only have to override `props` defined above
let objClone = JSON.parse(JSON.stringify(obj));
// Override each prop value
props.forEach(function(prop) {
// Ensure original object property is an array with enough elements
if (obj[prop] instanceof Array && obj[prop].length > $index) {
objClone[prop] = obj[prop][$index];
}
else {
// else simply use an hyphen as value
objClone[prop] = "-";
}
});
// Push clone to result
result.push(objClone);
});
});
return result;
}
let newArray = convertArray();
console.log(JSON.stringify(newArray, null, 2));

答案 2 :(得分:-1)
从哪里创建此数组。如果您在JavaScript或webservice类中创建此数组。然后我们可以告诉你它的泛型类。还有一个小方法来转换你想要的输出数组中的类元素。
让我用JavaScript代码回答。
//我正在创建一个数组对象手册,您可以从源代码或服务器json中获取它。
var Arr=[];
var obj={};
Obj.Name="fc_name";
obj.Value="12";
Arr.push(obj);
var obj={};
Obj.Name="fc_value";
obj.Value="dieje";
Arr.push(obj);
同样推送数组中的所有元素。 然后你将得到一个名为value的对象数组。
Arr=[
{"Name":"fc_value",
"Value":""dieje"
},
...
});
现在使用下面的函数将这个对象数组转换成你想要的数组。
function Convert(arr)
{
var array=[];
var obj={};
Arr.forEach(value)
{
obj[value.Name]=value.Value;
}
array.push(obj); //这是针对单个对象,您可以应用循环来获取数组中的多个值。 }