javascript:修剪对象的所有属性

时间:2018-07-31 14:44:52

标签: javascript ecmascript-6

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

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

对此:

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

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

5 个答案:

答案 0 :(得分:4)

您可以使用 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);

答案 1 :(得分:2)

您可以使用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));

答案 2 :(得分:0)

您可以通过遍历它来做到这一点。

for(var key in myObject) {
    myObject[key] = myObject[key].trim();
}

答案 3 :(得分:0)

您可以使用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)

Lodash的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
}

答案 4 :(得分:0)

const object1 = {
  a: ' somestring',
  b: ' a',
  c: 'a '
};

const newVals = Object.values(object1).map(val => val.trim());
console.log(newVals); //["somestring", "a", "a"]