假设您有以下jsonObject
var arrayWithValuesAndGroups = [{
"TestObject": "Object1",
"GraphGroup": {
"Test": {
"Group": "A",
"Value": "6"
},
"Test2": {
"Group": "B",
"Value": "5"
}
}
},
{
"TestObject": "Object2",
"GraphGroup": {
"Test": {
"Group": "A",
"Value": "9"
},
"Test2": {
"Group": "B",
"Value": "12"
}
}
},
{
"TestObject": "Object3",
"GraphGroup": {
"Test": {
"Group": "A",
"Value": "99"
},
"Test2": {
"Group": "B",
"Value": "16"
}
}
}
]
我想创建一个包含所有组的新对象,并且具有该组的所有值都应该在该数组中。例如,我希望将上述对象转换为下面的对象
{
"A": {
"Test1": {
"0": "6",
"1": "9",
"2": "99"
}
},
"B": {
"Test2": {
"0": "5",
"1": "12",
"2": "16"
}
}
}
你会用什么策略?
答案 0 :(得分:1)
您需要将一个数据结构转换为另一个数据结构。
这通常通过创建新对象并在一系列转换(在这种情况下是迭代,数组创建,值赋值)中从原始对象设置其值来完成。
虽然可以使用vanilla js轻松完成,但您也可以使用lodash库,它通过提供迭代,访问键,值等方法来极大地促进这种转换。
我不会为您的特定数据对象提供一个确切的解决方案,因为1)您已经询问过策略2)所以不能让别人去做您的工作3)答案应该对其他人有用有其他数据结构的人。
答案 1 :(得分:0)
试试这个。
对象和数组的概念在js和另一个代码上非常重要。
实践才是唯一的方法。
var newObject = {};
for(var i=0,iLen=arrayWithValuesAndGroups.length;i<iLen;i++){
var TestGroupObject = arrayWithValuesAndGroups[i];
console.log(TestGroupObject);
// {
// "TestObject": "Object1",
// "GraphGroup": {
// "Test": {
// "Group": "A",
// "Value": "6"
// },
// "Test2": {
// "Group": "B",
// "Value": "5"
// }
// }
// }
var GraphGroupObject = TestGroupObject.GraphGroup;
console.log(GraphGroupObject);
// {
// "Test": {
// "Group": "A",
// "Value": "6"
// },
// "Test2": {
// "Group": "B",
// "Value": "5"
// }
// }
var GraphGroupObjectKeys=Object.keys(GraphGroupObject);
for(var j=0,jLen=GraphGroupObjectKeys.length;j<jLen;j++){
var GraphGroupObjectKey = GraphGroupObjectKeys[j];
console.log(GraphGroupObjectKey)
// keys are Test, Test2
// GraphGroupObject[GraphGroupObjectKey]
// {
// "Group": "A",
// "Value": "6"
// }
var Group = GraphGroupObject[GraphGroupObjectKey].Group;
var Value = GraphGroupObject[GraphGroupObjectKey].Value;
if(!newObject[Group]){
newObject[Group]={};
}
if(!newObject[Group][GraphGroupObjectKey]){
newObject[Group][GraphGroupObjectKey]={};
}
newObject[Group][GraphGroupObjectKey][i] = Value;
}
}
答案 2 :(得分:0)
可能是以下代码可以帮助你解决这个问题,摆弄http://jsfiddle.net/jesamzjv/
function GetMyFormat(arrayWithValuesAndGroups){
var finalOb = {};
pushToOb = function(group, value, test){
if(!finalOb[group]){
finalOb[group] = {};
finalOb[group][test] = {};
}
var myOb = finalOb[group][test];
var count = Object.keys(myOb).length;
myOb[count] = value;
}
addToAnAr = function(ob){
for (var i in ob){
pushToOb(ob[i].Group,ob[i].Value,i)
}
}
for(var i in arrayWithValuesAndGroups){
item = arrayWithValuesAndGroups[i];
addToAnAr( item["GraphGroup"] );
}
return finalOb;
}
console.log(GetMyFormat(arrayWithValuesAndGroups))