javascript:修剪对象的所有属性

rap*_*2-h 4 javascript ecmascript-6

有没有办法修剪对象的所有属性?换句话说,我可以更改一下:

{a: ' a', b: 'b ', c: ' c '}
Run Code Online (Sandbox Code Playgroud)

对此:

{a: 'a', b: 'b', c: 'c'}
Run Code Online (Sandbox Code Playgroud)

看来我无法映射对象,那么如何将函数应用于所有属性并获取对象呢?

cнŝ*_*ŝdk 9

您可以使用Object.keys()方法来迭代对象属性并更新其值:

Object.keys(obj).map(k => obj[k] = obj[k].trim());
Run Code Online (Sandbox Code Playgroud)

演示:

Object.keys(obj).map(k => obj[k] = obj[k].trim());
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您的object值可以是其他数据types(不仅是strings),则可以添加检查以避免调用.trim()non strings

Object.keys(obj).map(k => obj[k] = typeof obj[k] == 'string' ? obj[k].trim() : obj[k]);
Run Code Online (Sandbox Code Playgroud)

  • forEach比map更可取。 (3认同)
  • @photo为什么会这样?.map是专为此类事情设计的。 (2认同)
  • 因为 `map` 用于返回一个新的转换数组。这里我们只需要循环并修改`obj`。 (2认同)

Ale*_*Vaz 6

您可以使用Object.keys来减少和修剪值,它看起来像这样:

function trimObjValues(obj) {
  return Object.keys(obj).reduce((acc, curr) => {
    acc[curr] = obj[curr].trim()
    return acc;
  }, {});
}


const ex = {a: ' a', b: ' b', c: ' c'};
console.log(trimObjValues(ex));
Run Code Online (Sandbox Code Playgroud)