Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript创建给定字符串文本的唯一副本_Javascript_Arrays_Regex_String - Fatal编程技术网

Javascript创建给定字符串文本的唯一副本

Javascript创建给定字符串文本的唯一副本,javascript,arrays,regex,string,Javascript,Arrays,Regex,String,var list=[Text,Text-Copy,Text-Copy1,Text-Copy-Copy,Text-Copy1-Copy] 我正试图创建这样一个独特的列表。这些实际上都是字符串文本的副本。我被创造独特后缀的逻辑所束缚。后缀只能是-Copy或-Copyn;n是copyn={1,2,3,…..}的数目。第二部分与我们在windows中创建新文件夹时所做的类似,唯一的区别是在windows中,如果我们创建另一个新文件夹,它被命名为new folder2,依此类推,但这里是-Copy1,-C

var list=[Text,Text-Copy,Text-Copy1,Text-Copy-Copy,Text-Copy1-Copy]

我正试图创建这样一个独特的列表。这些实际上都是字符串文本的副本。我被创造独特后缀的逻辑所束缚。后缀只能是-Copy或-Copyn;n是copyn={1,2,3,…..}的数目。第二部分与我们在windows中创建新文件夹时所做的类似,唯一的区别是在windows中,如果我们创建另一个新文件夹,它被命名为new folder2,依此类推,但这里是-Copy1,-Copy2,依此类推。这个命名约定是我最初要求的一部分

概念: 考虑空字符串数组 用户提供一些输入,逻辑应创建该输入的副本,如链接中嵌入的图片所示: 请访问此链接并检查下载sample.jpg:

基本上,若我的数组是空的,输入是文本,那个么逻辑应该像第一个条目那个样提供我的输出和最终数组输出。如果没有,那么考虑第二个条目,在这里,我再次提供相同的输入,理想输出应该是文本复制,但因为它已经存在于最终的数组中,所以输出应该是文本-Copy1。一旦逻辑处理了输出并将添加到最终数组中,它就应该能够推断出这一点

若第三次提供相同的输入文本,则输出字符串应为Text-Copy2。也可以在第三个或第四个条目中输入。输入总是来自最终数组本身的集合,也就是说,如果我的最终数组是[Text,Text-Copy,Text-Copy1,Text-Copy-Copy,Text-Copy-Copy1],那么输入的选择就是这些值之一

这样,它应该能够创建唯一的数组。逻辑应该可以用空数组或一开始给出的数组实现

现在,我要做的是使用regexjavascript匹配方法在输入中查找复制计数。如果count为0,那么输入就像第一个或第二个条目一样,然后我搜索生成的输出是否在最终数组中,基于此搜索,我要么在-Copy中添加后缀-Copy,要么只是在-Copyn中添加/更新n。如果只有很少的条目,那么这个逻辑可以很好地工作,但是如果条目更多,一切都会变得很困难

请帮忙

谢谢你把这把小提琴拿出来

主要部分如下

您需要下划线.js 功能输入,最终到达{

    var SUF =  ' - Copy'

    // input text is first occurence in final_arr
    if(!_(final_arr).contains(input)){
        return input
    }

    // input text is the second occurence in final_arr
    var copied = input + SUF
    if(!_(final_arr).contains(copied)){
        return copied
    }

    var reg = new RegExp(copied + '\\((\\d)\\)$')
    var matches = _(_(final_arr).map(function(d){ return d.match(reg) })).compact()

    // final_arr == ['text', 'text - Copy']
    if(matches.length == 0){
        return copied + '(1)'
    }

    // final_arr == ['text', 'text - Copy', 'text - Copy(1)', .. 'text - Copy(n)' ]
    var max = _.max(matches, function(m){ return parseInt(m[1]) })
    return max[0].replace(/\(\d+\)$/, '(' + (parseInt(max[1]) + 1) + ')')
}

我认为它在Windows资源管理器中的实现方式是:获取当前剪辑文件,在名称中添加'Copy',如果存在,则添加额外的空格n,如果存在,则增加n++直到找到一个插槽。工作非常完美…就像极少数LOC!!!谢谢:非常复杂,但也可以