【发布时间】:2019-08-05 21:59:51
【问题描述】:
我的代码自动在字符串中搜索颜色名称并添加随机数后缀并将它们作为元素存储在数组中。
我想要的是用我的数组的新修改元素创建一个新字符串。
当字符串多次出现相同的颜色名称时会出现问题。
我需要的是用我导出的数组的不同元素一一替换这些出现。
(我不想在Array中拆分字符串,将相同的元素替换为一个全新的数组中的另一个数组,然后将其加入一个字符串。我需要修改原始字符串)
例子:
字符串通过用户输入改变,所以如果我有:
str = ' little red fox is blue and red cat is blue';
然后我的代码找到所有颜色名称并生成一个新数组:
array = [ 'red2354' , 'blue7856' , 'red324', 'blue23467'] ;
(我的代码在每个颜色元素的末尾添加了 RANDOM 后缀,但我的数组的顺序与字符串的出现顺序相同)
期望的输出:
str = ' little red2354 fox is blue7856 and red324 cat is blue23467 ';
到目前为止我试过了:
var str = ' little red fox is blue and red cat is blue ';
//I have split string to Array:
ar1 = [ "little","red","fox","is","blue","and","red","cat","is","blue"];
//var dup = matchmine(ar1) find all color duplicates :
var dup = ["red","blue","red","blue"];
//I've sorted all duplicates to appear only once for option B:
var dup2 = ["red","blue"];
//var res = modify(str) takes all color names and adds random suffixes:
var res= ["redA" , "blueA" , "redB", "blueB" ] ;
//I have also create a new array with all strings in case I needed to match lengths:
var final = [ "little","redA","fox","is","blueA","and","redB","cat","is","blueB"];
var i = ar1.length-1;
for ( i ; i >= 0; i--) {
var finalAr = str.replace(ar1[i],final[i]);
str = finalAr;}
alert(finalAr);
问题是循环进行并且第一次替换所有元素。到目前为止一切顺利,但在以下循环中再次替换第一个。
循环结果:
str = 'little redAB fox is blueAB and red cat is blue '
期望的输出:
str = 'little redA fox is blueA and redB cat is blueB '
【问题讨论】:
-
“我需要修改原来的字符串”:那是不可能的。字符串在 JavaScript 中是不可变的。当您想要更改某些内容时,您总是会创建一个新字符串。
-
您总是想在第一次出现时添加“A”,在第二次出现时添加“B”等等。或者是什么逻辑?
-
@trincot 逻辑是随机的,它需要重复并在末尾添加额外的字符串。即我的代码发现 red 有 4 个重复项,并计算和存储 red874 等元素。我想要的只是用第一个 redrandom 元素映射第一个红色,用第一个 bluerandom 映射第一个蓝色等
-
所以你有一个随机数数组?或者你不关心数字是多少(供稍后参考),只要结果有唯一的单词?
-
顺便说一句,为什么“is”这个词不被认为是重复词?
标签: javascript arrays string replace