Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   replace массива (https://javascript.ru/forum/misc/12199-replace-massiva.html)

botan-limon 05.10.2010 19:34

replace массива
 
Друзья, подскажите как на javascript реализовать аналог следущего php-кода:

str_replace( 
   array( 'а', 'б', 'в' ),
   array( 'a', 'b', 'v' ),
   $str
);

monolithed 06.10.2010 00:46

Можно так:
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'));

with-love-from-siberia 06.10.2010 11:19

Или, например, так. Но для чего все это?
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]);

e1f 06.10.2010 17:11

http://javascript.ru/php/str_replace


Часовой пояс GMT +3, время: 04:30.