2016-11-02 8 views
2

私は、オブジェクト内の値を特定のパターンと一致させる場合、その値を置き換える効率的な方法を探しています。私はすぐにストロークを設定することができるようになるJS:パターンに一致するオブジェクトのすべての文字列値を置き換えますか?

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

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

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

例えば、私は、特定の形状のための色ですべての「###」のパターンを置き換えることができるようにしたいのですがおよび/または様々なオブジェクトの値を埋める。

これをきれいに行う方法はありますか?おそらくLodashまたは正規表現を使用していますか?

+0

? – Meir

+0

最新バージョンの使用 – Scotty

答えて

0

JavaScript String.prototype.replace() APIを使用すると、それを正確に行うことができます。

最初にオブジェクトのプロパティを移動する必要がありますが、それはかなり簡単です。

2

平野JS、不要ライブラリ:lodashで

var shapes = { 
 
    square: { 
 
    attr: { 
 
     stroke: '###', 
 
     'stroke-width': '%%%' 
 
    } 
 
    }, 
 
    circle: { 
 
    attr: { 
 
     fill: '###', 
 
     'stroke-width': '%%%' 
 
    } 
 
    } 
 
} 
 
shapes = JSON.parse(
 
    JSON.stringify(shapes).replace(/###/g,"red").replace(/%%%/g,"23") 
 
) 
 
console.log(shapes);

4

、あなたが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; 
    } 
    }); 
} 
0

ユーティリティ機能を持っているあなたは、値を代入するために_.transformを使用することができます置換対象に渡された属性の属性の属性値が置き換えられていない場合は、元の値が使用されます。使用しているlodashのバージョン

function replace(src, repl) { 
 
    return { 
 
    attr: _.transform(src.attr, function(result, val, key) { 
 
     result[key] = repl[val] || val; 
 
    }, {}) 
 
    }; 
 
} 
 

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

 
console.log(square); 
 
console.log(circle);
<script src="https://cdn.jsdelivr.net/lodash/4.16.6/lodash.min.js"></script>

関連する問題