Typescript 是否在不迭代的情况下,将任何具有值空字符串的对象字段替换为null?
考虑这个对象:Typescript 是否在不迭代的情况下,将任何具有值空字符串的对象字段替换为null?,typescript,Typescript,考虑这个对象: { value1: 'bacon', value2: '', value3: 'lard', value4: '', value5: 'cheese', }; 有没有一种不经过迭代就获得以下对象的方法 { value1: 'bacon', value2: null, value3: 'lard', value4: null, value5: 'cheese', }; 没有迭代是不可能的。从外部函数
{
value1: 'bacon',
value2: '',
value3: 'lard',
value4: '',
value5: 'cheese',
};
有没有一种不经过迭代就获得以下对象的方法
{
value1: 'bacon',
value2: null,
value3: 'lard',
value4: null,
value5: 'cheese',
};
没有迭代是不可能的。从外部函数的角度来看,对象只是一组任意的键值对 也就是说,您可以使用lodash之类的库及其功能在一行代码中完成:
_.mapValues(myObj, v => v === '' ? null : v)
或者,您也可以在没有外部库的情况下自己完成(本例改变了原始对象):
还有另一种方法,你可以按照你的要求去做,使用一个对象。这会以一种懒惰的方式满足你的要求。它不会主动更改对象中的值,但当请求值时,它会检查该值是否为空字符串,如果为空,则返回null:
const proxyObj = new Proxy(myObj, {
get: (obj, prop) => obj[prop] === "" ? null : obj[prop],
});
// proxyObj.value1
// => 'bacon'
// proxyObj.value2
// => null
这个代理解决方案可能很聪明,但在大多数情况下,上面的迭代解决方案是更简单、更好的选择。另一个迭代示例
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; }, {})
不,据我所知不是。我确实添加了一个注释,其中有一种方法可以使用
Proxy
类来实现这一点,尽管这可能不是您真正需要的。我认为forEach是最干净的方法。可惜没有“把戏”。干杯
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; }, {})