javascript – JS:替换与模式匹配的对象中的所有字符串值?

我正在寻找一种有效的方法来替换对象中的值,如果它们匹配某个模式.

var shapes = {
  square: {
    attr: {
      stroke: '###',
      'stroke-width': '%%%'
    }
  },
  circle: {
    attr: {
      fill: '###',
      'stroke-width': '%%%'
    }
  }
}

例如,我希望能够用特定形状的颜色替换所有’###’图案:

var square = replace(shapes.square, {
  '###': '#333',
  '%%%': 23
});

var circle = replace(shapes.circle, {
  '###': '#111',
  '%%%': 5
});

这将允许我快速设置各种对象的笔划和/或填充值.

有没有办法干净地做到这一点?也许使用Lodash或正则表达式?

解决方法:

在lodash中,您有一个实用功能mapValues

function replaceStringsInObject(obj, findStr, replaceStr) {
  return _.mapValues(obj, function(value){
    if(_.isString(value)){
      return value.replace(RegEx(findStr, 'gi'), replaceStr);
    } else if(_.isObject(value)){
      return replaceStringInObject(value, findStr, replaceStr);
    } else {
      return value;
    }
  });
}
上一篇:javascript – 如何从lodash导入和使用_.sortBy


下一篇:javascript – 有没有办法在Lodash或Underscore中指定null的默认值?