replace массива
Друзья, подскажите как на javascript реализовать аналог следущего php-кода:
str_replace( array( 'а', 'б', 'в' ), array( 'a', 'b', 'v' ), $str ); |
Можно так:
var replace = /абв/; var subject = "абв"; alert(subject.replace(replace, "abv")) А можно и так:
function str_replace (search, replace, subject ) {
if(!(replace instanceof Array)){
replace=new Array(replace);
if(search instanceof Array){
while(search.length>replace.length){
replace[replace.length]=replace[0];
}
}
}
if(!(search instanceof Array))search=new Array(search);
while(search.length>replace.length){
replace[replace.length]='';
}
if(subject instanceof Array){
for(k in subject){
subject[k]=str_replace(search,replace,subject[k]);
}
return subject;
}
for(var k=0; k<search.length; k++){
var i = subject.indexOf(search[k]);
while(i>-1){
subject = subject.replace(search[k], replace[k]);
i = subject.indexOf(search[k],i);
}
}
return subject;
}
alert(str_replace('абв ', 'абв', 'abv'));
|
Или, например, так. Но для чего все это?
function str_replace(search, replace, string)
{
// 1. все должно быть массивами
search = [].concat(search);
replace = [].concat(replace);
// 2. выровнять массивы
var len = replace.length - search.length;
var p_last = search[search.length - 1];
// 2.1. если массив строк поиска короче
for (var i = 0; i < len; i++) {
search.push(p_last);
}
// 2.2. если массив строк замены короче
for (var i = 0; i < -len; i++) {
replace.push('');
}
// 3. непосредственная замена
var result = string;
for (var i = 0; i < search.length; i++) {
result = result.split(search[i]).join(replace[i]);
}
return result;
};
var x = 'abc aaa defxyz';
var y = str_replace(
['a', 'b', 'c'],
['x', 'y', 'z'],
x);
alert([x, y]);
|
|
| Часовой пояс GMT +3, время: 18:34. |