javascript只删除值,但仍然是关键

时间:2016-10-25 12:53:00

标签: javascript arrays json

我有一个json对象

var myObj = {'test' : {'key1' : 'value', 'key2': 'value', 'key3': 'value'}}

如何运行循环以仅删除值但保持键 所以我得到了这个

var myObj = {'test' : {'key1' : '', 'key2': '', 'key3': ''}}

或者如何制作没有值的对象的副本?

3 个答案:

答案 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.keysarray.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);