我有一个json对象
var myObj = {'test' : {'key1' : 'value', 'key2': 'value', 'key3': 'value'}}
如何运行循环以仅删除值但保持键 所以我得到了这个
var myObj = {'test' : {'key1' : '', 'key2': '', 'key3': ''}}
或者如何制作没有值的对象的副本?
答案 0 :(得分:2)
你可以迭代键并分配一个空字符串
var myObj = {'test' : {'key1' : 'value', 'key2': 'value', 'key3': 'value'}};
Object.keys(myObj.test).forEach(function (k) {
myObj.test[k] = '';
});
console.log(myObj);

答案 1 :(得分:0)
for-in
循环,并将值替换为空白。或Object.keys
和array.reduce
的组合。
答案 2 :(得分:0)
您可以循环浏览javascript对象的属性,如下所示:
for (var prop in myObj) {
if (myObj.hasOwnProperty(prop) &&
typeof myObj[prop] !== 'function') {
myObj[prop] = '';
}
}
快速了解这是做什么以及为什么:
for (var prop in myObj)
会覆盖您对象中的每个属性。if (myObj.hasOwnProperty(prop)
将确保您不会更改通过原型链继承的属性(我们通常不会 想要这样做)。&& typeof myObj[prop] !== 'function')
将忽略任何属性的属性。如果您确实想要更改对象上的函数值,则应删除此检查。myObj[prop] = ''
为属性分配一个新值(在这种情况下为空字符串)。要执行此操作,请“深入”(多个级别)进行检查,您必须以递归方式调用此方法:
var myObj = {
'test': {
'key1': 'value',
'key2': 'value',
'key3': 'value',
'key4': { 'subkey1': 'value', 'subkey2': 'value' }
}
}
var replaceProps = function(obj, replaceWith) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof obj[prop] !== 'function') {
if (typeof obj[prop] === 'object') {
replaceProps(obj[prop], replaceWith)
} else {
obj[prop] = replaceWith;
}
}
}
}
replaceProps(myObj, '');
console.log(myObj);