考虑这个对象:
{
value1: 'bacon',
value2: '',
value3: 'lard',
value4: '',
value5: 'cheese',
};
有没有办法在没有迭代的情况下获得以下对象?:
{
value1: 'bacon',
value2: null,
value3: 'lard',
value4: null,
value5: 'cheese',
};
答案 0 :(得分:3)
没有迭代就不可能做到。从外部函数的角度来看,您的对象只是一组任意的键值对。
那就是说,你可以在一行代码中使用像lodash这样的库及其mapValues
函数:
_.mapValues(myObj, v => v === '' ? null : v)
或者,您可以在没有外部库的情况下自己完成(此示例会改变原始对象):
Object.keys(myObj).forEach(k => myObj[k] = myObj[k] === '' ? null : myObj[k])
您可以使用Proxy
对象以另一种方式执行您所要求的操作。这就是你以懒惰的方式提出的问题。它不会主动更改对象中的值,但是当请求值时,它会检查它是否为空字符串,如果是,则返回null:
const proxyObj = new Proxy(myObj, {
get: (obj, prop) => obj[prop] === "" ? null : obj[prop],
});
// proxyObj.value1
// => 'bacon'
// proxyObj.value2
// => null
此代理解决方案可能很聪明,但在大多数情况下,上述迭代解决方案是更简单,更好的选择。
答案 1 :(得分:0)
另一个迭代示例。
const obj = {
value1: 'bacon',
value2: '',
value3: 'lard',
value4: '',
value5: 'cheese',
};
Object.keys(obj).reduce((acc, key) => {acc[key] = obj[key] === '' ? null :
obj[key]; return acc; }, {})