我有一个可以具有不同属性的对象(数组/对象/等)。
我想将对象转换为数组封装的每个子字段。
例如:
"head": {
"text": "Main title",
"sub": {
"value": "next"
},
"place": "secondary"
}
包括对象的头字段。 我希望将对象封装在这样的数组中:
"head": [{
"text": "Main title",
"sub": {
"value": "next"
},
"place": "secondary"
}]
我发现这是使每个项目的结构保持相同的可能性。
我也尝试使用接口,但是由于有时它是对象而有时不是对象,所以这给我带来了麻烦。
如果有更好的方法将对象转换为正确的接口,我想听听更多。
谢谢!
答案 0 :(得分:1)
这将递归检查每个值,如果不是,则将其设置为数组。不包括您放入keysToSkip数组中的键。
const obj = {
"head": {
"text": "Main title",
"sub": {
"value": "next"
},
"place": "secondary"
},
"alreadyArray": [
"val", "val2"
]
}
const keysToSkip = ["value"]
let depthFirstLoop = (obj) => {
Object.keys(obj).forEach((key) => {
if (typeof obj[key] === 'object' && obj[key] !== null) {
depthFirstLoop(obj[key]);
}
if (!Array.isArray(obj[key]) && !keysToSkip.includes(key)) {
obj[key] = [obj[key]]
}
});
};
depthFirstLoop(obj)
答案 1 :(得分:0)
通常,您不应在迭代对象时更改对象。最好创建一个新对象。
const obj = {
"head": {
"text": "Main title",
"sub": {
"value": "next"
},
"place": "secondary"
}
}
var newObj = {}
for( key in obj ){
newObj[key] = [obj[key]]
}