通过添加' -copy - '重命名复制的文件接下来是一个数字

时间:2018-01-04 08:20:44

标签: javascript

我使用javascript复制名称,名称不应重复。然后我添加了一个-copy-的计数器。例如,如果名称为joy,则副本的结果应为joy-copy-1。如果我再次复制joy,则生成的名称应为joy-copy-2

我使用的是counter,但这不正确。由于counter始终在增加,因此不依赖于name值。

示例代码:

 var counter = 1;
 var index = _.find(documents, function (o) {
   console.log("--------------->", counter++);                    
   o.name = o.name + '-copy-' + counter;
   return o._id.$oid == CompareValue;
 }); 

我正在从JSON文件中检索name并添加counter号码。但这不正确。

预期输出
例如

  

名称是快乐;
  复制后
  欢乐拷贝-1

  再次复制欢乐
  快乐 - 复制 - 2

  再次复制欢乐
  快乐 - 复制 - 3

  如果我复制joy-copy-3,那么,
  快乐 - 复制 - 3 - 复制 - 1

  再次复制joy-copy-3
  快乐 - 复制 - 3 - 复制 - 2

  enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式检查副本并获取递增的数字。

function update(string) {
    var match = string.match(/^(.+-copy-)(\d+)$/);
    return match && match[2] !== '3'
        ? match[1] + (+match[2] + 1)
        : string + '-copy-1';
}

var i = 10,
    string = 'joy';

while (i--) {
    console.log(string = update(string));
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

如何创建名称计数器地图呢?

 var counters = [];
 
 function copy(name){
  return name + '-copy-' + (++counters[name] || (counters[name] = 1));
 }
 
 console.log(copy("joy"));
 console.log(copy("joy-copy-1"));
 console.log(copy("joy-copy-1-copy-1"));
 
 console.log(copy("joy"));
 
 console.log(copy("joy-copy-2"));

console.log(copy("joy"));

var counters = [];

 var index = _.find(documents, function (o) {
        //console.log("--------------->", counter++);                    
        o.name = o.name + '-copy-' + (++counters[o.name] || (counters[o.name] = 0));
        return o._id.$oid == CompareValue;
      });