我想这个标题非常简单。基本上我想要的是像mysqldump ... --no-data ...
这样的东西。例如,我有一个像这样的json对象:
{ "key1" : "value1",
"key2" : "value2",
"key3" : {
"key3a" : 1,
"key3b" : 2
},
"key4" : "value3"
}
我想要的是和具有相同结构的空对象,如下所示:
{ "key1" : null,
"key2" : null,
"key3" : {
"key3a" : null,
"key3b" : null
},
"key4" : null
}
答案 0 :(得分:1)
你想要的是什么类似于通常所谓的“深度克隆”,你似乎只想为不是对象的东西返回null
。进行这种克隆的最简单方法是使用递归函数:
function deepAutomnClone(o){
if (typeof o !== 'object') return null;
var c = {};
for (k in o) c[k] = deepAutomnClone(o[k]);
return c;
}
你会这样称呼:
var obj = { "key1" : "value1",
"key2" : "value2",
"key3" : {
"key3a" : 1,
"key3b" : 2
},
"key4" : "value3"
};
console.log(deepAutomnClone(obj));
现在,你的问题不是很精确。您可能希望修改该函数,具体取决于所需的数组处理。
最后一件事:请注意,您拥有的不是“JSON对象”,因为JSON是基于文本的交换格式。这是一个普通的JavaScript对象。
答案 1 :(得分:0)
这是一个支持在对象之外重置阵列的解决方案。 它还可以避免将已经继承的对象的属性设置为null。
function cloneAndReset(obj) {
var res = null;
if (obj instanceof Array) {
res = [];
for (var i = 0; i < obj.length; i++) {
res[i] = cloneAndReset(obj[i]);
}
return res;
}
if (obj instanceof Object) {
res = {};
for (p in obj) {
if (obj.hasOwnProperty(p)) {
res[p] = cloneAndReset(obj[p]);
}
}
}
return res;
}