繁体   English   中英

Javascript-遍历对象并使用键/值执行文本替换

[英]Javascript - Loop through object and use key/value to perform text replace

我正在使用一个接收以这种方式组织的对象的函数:{“ oldID1”:“ newID1”,“ oldID2”:“ newID2”,…}

该信息将被馈送到另一个函数中,该函数将在包含这些ID的文本区域内执行将字符串oldID1替换为newID1,将oldID2替换为newID2等。

此初始对象最初来自一系列排序操作,因此对象键代表列表的原始顺序,而对象值代表新排序的顺序。 因此,例如,我将遇到一个看起来像这样的对象:

{
"1":"3",
"2":"1",
"3":"2",
"4":"4"
}

目的是将项目3移到列表顶部。 因此,对于单独的文本区域中的文本,应将1替换为3,将2替换为1,将3替换为2。

当我尝试迭代对象并执行替换时,我遇到了问题,因为某些文本多次被替换了。 因此,“ 1”被“ 3”代替,但随后又被“ 2”代替。

这是我用来遍历该对象的代码:

$.each(the_object, function(key, value){   
      replace_text(key,value);
});

function replace_text(old_id, new_id){
    var textarea        = $("#the_textarea");
    var str             = textarea.val();
    var replace_regex   = new RegExp("<pic_"+old_id+">");
    str = str.replace(replace_regex, '<pic_'+new_id+'>');
    the_textarea.val(str);
}

我应该强调,排序过程与文本替换无关。 我只是担心寻找给定我所拥有的对象来执行替换文本的最佳方法。

提前致谢

给定包含ID的对象名为idObj并且该对象在传递给replace的函数的关闭中可用,我想这应该可以工作:

var textarea = $('#the_textarea');
textarea.val(function(i,str){
  return str.replace(/<pic_(.*?)>/g,
     function(m,n){ 
       return '<pic_' + (idObj[n] || n) + '>';
     });
});

这里的n变量将包含旧索引。 我看到idObj的属性是以旧索引命名的,因此可以像这样检索新索引var newIndex = idObj['oldIndex]; 并且该函数针对任何给定的旧索引返回。

问题很明显。

键“ 1”的“ 1”被替换为“ 3”,键“ 3”的“ 3”被替换为“ 2”

所以你可以做这样的事情。 在功能上

var replace_regex   = new RegExp("<pic_"+old_id+">");
str = str.replace(replace_regex, '<pic_N'+new_id+'>');

然后循环

str = str.replace(/<pic_N/g, '<pic_');

在此处查看演示: http : //jsfiddle.net/cJn6w/4/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM