在不知道prop名称的情况下保持和设置对象子属性的默认值

时间:2017-10-02 19:48:34

标签: javascript object redux vuex

user.firstName = ''

我经常在这种情况下运行:

我有一个变异/缩减器需要设置几个道具的默认值。我想不必一个一个地明确取消/重置它们。 (例如:用户注销:for...in等)。

在不知道对象结构的情况下,删除每个值(并设置为null或空字符串)的最有效,最安全和最高效的方法是什么?任何lodash或其他具有该用途的库?

我基本上在考虑使用for (prop in user) { console.log(prop); }

的递归解决方案
Object.keys

user = { firstName: '', age: null, location: { country: '', city: '', }, } ,或保留可替换上一个的默认对象。

期望的结果

program1.cpp:44:30: error: ‘get’ was not declared in this scope                                                                   
          while (get(file,word))  

2 个答案:

答案 0 :(得分:1)

您可以使用递归函数将所有值设置为null或空字符串。如果值是对象,则将其传递回函数。

let user = {
  firstName: 'Nick',
  age: 35,
  location: {
    country: 'USA',
    city: 'NYC',
  },
}

function nullify(obj) {
  Object.keys(obj).forEach(key => {
    if (typeof obj[key] === 'object') {
      return nullify(obj[key]);
    }
    obj[key] = (typeof obj[key] === 'string') ? '' : null;
  });
  return obj;
}

console.log(nullify(user));

答案 1 :(得分:0)

我在想错误的方法。我的问题是Vuex实现的一部分--Vuex为API提供了一种以编程方式重置状态的方法。 一个简单的Object.assign(state, defaultState);可以解决问题。