2017-04-25 97 views
-1

与元素的数组我有一个像下面创建从输入数组

[{ 
    "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":"-" 
} 
] 

另外请注意,由于没有CO_值项目编号2002年时把一个“ - ”。 阵列中还会有更多其他参数我需要一些动态逻辑来创建结果数组

+0

有很多方法来实现你想要什么。但是当你说你想考虑所有元素时,你需要澄清你的真正含义。 – jrook

+0

jrook,我的意思是它应该有所有的参数,但不是像FC_Id.Sub的子阵列,实际上像FC_Id,FC_Name这样的子数组将被转换为单个元素,所以会重复元素的数量。它很难解释,但你可能会从上面定义的结果数组中得到一个想法。 –

+0

所以一些研究“扁平阵列”。 [这个问题](http://stackoverflow.com/q/40250107/215552)与你非常相似。 –

回答

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

同样推送数组中的所有元素。 然后,您将拥有一个具有名称值的对象数组。

Arr=[ 
{"Name":"fc_value", 
"Value":""dieje" 
}, 
... 
}); 

现在使用下面的函数将这个对象数组转换为您的愿望数组。

function Convert(arr) 
{ 
var array=[]; 
var obj={}; 
Arr.forEach(value) 
{ 
obj[value.Name]=value.Value; 
} 

array.push(obj); //这是单个对象,您可以应用循环来获取数组中的多个值。 }

+0

我正在用Javascript做到这一点。 –

0

像这样:

  • 对于数据
    • 查找FC和CO之间的ID中的至少一个列表(或者如果没有这样的构造一个元素列表的每个元素列表中找到)
    • 迭代它的长度,并替换子条目的相关条目
  • 拼合结果

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

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

+0

@AahanaPatel是否回答了您的问题? –