gpt4 book ai didi

javascript - 我怎样才能实现这个逻辑

转载 作者:搜寻专家 更新时间:2023-11-01 04:26:04 26 4
gpt4 key购买 nike

我有如下的对象结构

var obj = {
a : 1,
b : [x,y,z],
c : [0,1,3],
d : ['%','-','+']
}

我想将该对象转换为以下格式

{
1 : {
x : {
0 : ['%','-','+'], // Last index remains as an array
1 : ['%','-','+'],
3 : ['%','-','+']
},
y : {
0 : ['%','-','+'], // Last index remains as an array
1 : ['%','-','+'],
3 : ['%','-','+']
},
z : {
0 : ['%','-','+'], // Last index remains as an array
1 : ['%','-','+'],
3 : ['%','-','+']
}
}
}

如果在上述情况下 ['%','-','+'] 之后还有一个属性,则继续相同的过程..

var v = {}/* Object of above */, keys = Object.keys(v), simplifiedColumns = {};
for (var i = 0, l = keys.length; i < l ; i++) {
if (v[i] instanceof Array) {

}else{
simplifiedColumns[keys[i]] = simplifiedColumns[keys[i]] || {};
}
}

请建议我完成这个逻辑。

最佳答案

这是一种有效的算法,但它只会为 xyz 创建一个对象,并引用相同的对象对象。

此外,以下示例假定键的顺序(由 Object.keys() 提供)与定义对象的顺序相同。情况并非总是如此,因此更好的解决方案是将对象更改为数组:

var obj = [
{
"key": "a",
"value": 1
},
{
"key": "b",
"value": ["x","y","z"]
},
{
"key": "c",
"value": [0,1,3]
},
{
"key": "d",
"value": ['%','-','+']
}
];

但无论如何,这里是使用原始对象表示法的算法:

var obj = {
a : 1,
b : ["x","y","z"],
c : [0,1,3],
d : ['%','-','+']
};

var keys = Object.keys(obj);

//set tempObj to the last array
var tempObj = obj[keys[keys.length - 1]];

//traverse the rest of the keys backwards
for (var i = keys.length - 2; i >= 0; i--) {
var key = keys[i];

//create new empty object
var newObj = {};

//append "tempObj" to that object and using the keys that are in the current array
//or if the property isn't an array, use the property itself as key
if (Array.isArray(obj[key])) {
for (var k = 0; k < obj[key].length; k++) {
newObj[obj[key][k]] = tempObj;
}
} else {
newObj[obj[key]] = tempObj;
}
//override tempObj with the new created object
tempObj = newObj;
}

FIDDLE

顺便说一句,如果您需要单独的、独立的对象,您可以更改行

newObj[obj[key]] = tempObj;

类似于

newObj[obj[key]] = copyObject(tempObj);

其中 copyObject 是一个创建对象深拷贝的函数。但我想在那种情况下,性能会急剧下降,因为您一遍又一遍地复制相同的对象。

关于javascript - 我怎样才能实现这个逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17161762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com