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; }, {})