2010-01-14 14 views
6

साथ विश्व स्तर पर की जगह आप प्रतिस्थापन के लिए सरणी का उपयोग कर सकते हैं:जावास्क्रिप्ट सरणी

var array = {"from1":"to1", "from2":"to2"} 

for (var val in array) 
    text = text.replace(array, array[val]); 

लेकिन क्या होगा अगर आप विश्व स्तर पर बदलने के लिए की जरूरत है, यानी पाठ = text.replace (/ से/जी, "करने के लिए");

ऐरे बहुत बड़ा है, इसलिए यदि मैं प्रत्येक चर के लिए "text = text.replace (...)" लिखता हूं तो स्क्रिप्ट बहुत अधिक जगह लेगी।

आप उस मामले में सरणी का उपयोग कैसे कर सकते हैं? "/ से 1/जी": "to1" काम नहीं कर रहा है।

+2

आपकी सरणी वास्तव में ऑब्जेक्ट ऑब्जेक्ट है, एक ऐरे ऑब्जेक्ट नहीं है, भले ही इसे एक एसोसिएटिव सरणी के रूप में माना जा सके :) – Luc125

उत्तर

7
var array = {"from1":"to1", "from2":"to2"} 

for (var val in array) 
    text = text.replace(new RegExp(val, "g"), array[val]); 

संपादित करें: के रूप में एंडी ने कहा, आप this one की तरह एक स्क्रिप्ट का उपयोग विशेष वर्ण से बचने के लिए हो सकता है।

+0

यदि स्ट्रिंग में regexp विशेष वर्ण हो सकते हैं, तो उन्हें सही ढंग से बचाना न भूलें। –

2

यहाँ सरल, गैर RegExp आधारित स्ट्रिंग के लिए मुहावरा है जे एस में की जगह है, तो आप regex-विशेष वर्ण के बारे में चिंता करने की जरूरत नहीं:

for (var val in array) 
    text= text.split(val).join(array[val]); 

नोट वहाँ के रूप में एक वस्तु का उपयोग कर के साथ मुद्दों कर रहे हैं एक सामान्य उद्देश्य लुकअप। अगर किसी ऑब्जेक्ट प्रोटोटाइप के साथ बंद हो गया है (बुरा विचार है, लेकिन कुछ पुस्तकालय इसे करते हैं) तो आप चाहें तो val से अधिक प्राप्त कर सकते हैं; आप इससे बचने के लिए hasOwnProperty परीक्षण का उपयोग कर सकते हैं। इसके अलावा आईई में यदि आपकी स्ट्रिंग Object की विधि के साथ संघर्ष करने के लिए होती है जैसे कि toString, आईई रहस्यमय तरीके से इसे छुपाएगा।

आपके उदाहरण के लिए यहां आप ठीक हैं, लेकिन एक सामान्य मामले के रूप में जहां तार कुछ भी हो सकते हैं, आपको या तो संघर्ष से बचने के लिए कुंजी स्ट्रिंग को प्रोसेस करके या एक अलग डेटा का उपयोग करके, इसके आसपास काम करने की आवश्यकता होगी संरचना [find, replace] Arrays के एक ऐरे के रूप में।

4

यहां मेरा समाधान है, मानते हैं कि array में स्ट्रिंग कुंजियों से बचने की आवश्यकता नहीं है।

यह विशेष रूप से कुशल जब वस्तु array बड़ी है है:

var re = new RegExp(Object.keys(array).join("|"), "g"); 
var replacer = function (val) { return array[val]; }; 
text = text.replace(re, replacer); 

नोट इस आवश्यकता Object.keys विधि उपलब्ध होने की, लेकिन आप आसानी से इसे शिम कर सकते हैं अगर यह नहीं है।

संबंधित मुद्दे