代码之家  ›  专栏  ›  技术社区  ›  rap-2-h

javascript:修剪对象的所有属性[duplicate]

  •  1
  • rap-2-h  · 技术社区  · 6 年前

    这个问题已经有了答案:

    是否有方法修剪对象的所有属性?换言之,我能改变一下吗:

    {a: ' a', b: 'b ', c: ' c '}
    

    对此:

    {a: 'a', b: 'b', c: 'c'}
    

    似乎我无法映射对象,所以如何将函数应用于所有属性并使对象返回?

    5 回复  |  直到 6 年前
        1
  •  9
  •   cнŝdk    5 年前

    你可以用 Object.keys() method 要迭代对象属性并更新其值,请执行以下操作:

    Object.keys(obj).map(k => obj[k] = obj[k].trim());
    

    演示:

    var obj = {
      a: ' a',
      b: 'b ',
      c: ' c '
    };
    
    Object.keys(obj).map(k => obj[k] = obj[k].trim());
    console.log(obj);

    编辑:

    如果你的 object 值可以是其他数据 types (不仅如此 strings ),您可以添加支票以避免呼叫 .trim() 在非 .

    Object.keys(obj).map(k => obj[k] = typeof obj[k] == 'string' ? obj[k].trim() : obj[k]);
    
        2
  •  3
  •   Alexandre Wiechers 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));
        3
  •  0
  •   Sookie Singh    6 年前

    你可以通过循环来完成。

    for(var key in myObject) {
        myObject[key] = myObject[key].trim();
    }
    
        4
  •  0
  •   Srinivas    6 年前
    const object1 = {
      a: ' somestring',
      b: ' a',
      c: 'a '
    };
    
    const newVals = Object.values(object1).map(val => val.trim());
    console.log(newVals); //["somestring", "a", "a"]
    
        5
  •  0
  •   OliverRadini    6 年前

    您可以使用use reduce创建一个具有所需值的对象:

    const test = {a: ' a', b: 'b ', c: ' c '}
    const trimAllValues = input => Object.keys(input)
      .reduce((prev, next) =>
        Object.assign(prev, {
          [next]: test[next].replace(/\s+/g, '')
        }), {});
      
    const result = trimAllValues(test)
    console.log(result)

    洛达斯的 mapValues 将会有更高的性能和更好的浏览器支持。您可以使用lodash,或者 have a look at their source 并实施同样的措施:

    function mapValue(object, iteratee) {
      object = Object(object)
      const result = {}
    
      Object.keys(object).forEach((key) => {
        result[key] = iteratee(object[key], key, object)
      })
      return result
    }