首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索、计数重复字符串并为每个数字添加

搜索、计数重复字符串并为每个数字添加
EN

Stack Overflow用户
提问于 2016-09-07 10:41:59
回答 1查看 86关注 0票数 0

我有一个脚本,它在数组中搜索重复的文本字符串并更改颜色。

代码语言:javascript
复制
function checkDuplicates() {
    var values = new Array();
    var $input = $('input[type=\'text\']');
    var error = 0;
    $input.each(function() {
        $(this).removeClass('double-error');
        var that = this;
        if (that.value!='') {
            values[that.value] = 0;
            $('input[type=\'text\']').each(function() {
                if (this.value == that.value) {
                    values[that.value]++;
                    }
                });
            } //endif
        });

    $input.each(function(key) {
        if (values[this.value]>1) {
            error++;
            $(this).addClass('double-error');
            }
        });

    return (error <= 0); //returns false or true
    }

<style type="text/css">
    .double-error {
        color:red;
        border:1px solid red;
        }
</style>

,这很好,

然而,我需要计数重复的字符串,并添加跟踪它们是否是该单词的第一次出现,第二次出现该单词,等等。

例如:

给定john, john, peter, doe, peter, john,结果将是john-1, john-2, peter-1, doe, peter-2, john-3

这就是我目前的情况:

代码语言:javascript
复制
function eliminateDuplicates() {
    var values = new Array();
    var $input = $('input[type=\'text\']');
    var error = 0;

    $input.each(function() {
        $(this).removeClass('double-error');
        var that = this;
        if (that.value!='') {
            values[that.value] = 0;
            $('input[type=\'text\']').each(function() {
                if (this.value == that.value) {
                    values[that.value]++;
                }
            });
        }
    });

    $input.each(function(key) {
        if (values[this.value]>1) {
            error++;
            myArray = values[this.value];
            for (var i = 0; i < myArray; i++) {
                $(this).parent()
                .find('input[type=\'text\']')
                .val(this.value + '-' + i);
                } 
            }
        });

    return error <= 0; //return error > 0 ? false : true;
    }

但我得到了这个结果:

约翰-0-1-2,约翰-0-1-2,彼得-0-1,多伊,彼得-0-1,约翰-0-1-2

怎么了?

我做了一些修改:

代码语言:javascript
复制
function eliminateDuplicates() {
        var values = new Array();
    var $input = $('input[type=\'text\']');
    var error = 0;
    $input.each(function() {
        $(this).removeClass('double-error');
        var that = this;
        if (that.value!='') {
            values[that.value] = 0;
            $('input[type=\'text\']').each(function() {
                if (this.value == that.value) {
                    values[that.value]++;
                }
            });
        }
    });

    $input.each(function(key) {
        if (values[this.value]>1) {
            var name=this.value;
            var names = values[this.value];
                values[this.value]++;
            for (var i = 0; i < names; i++){
        $(this).parent().find('input[type=\'text\']').val(name + '-' + i);
            }


        }

    });
checkDoubles();
    return error <= 0; //return error > 0 ? false : true;
}

现在,我按顺序得到计数,但不是1。例如,如果我有4个重复的名称(Peter),我得到:

彼得-3,彼得-4,彼得-5,彼得-6。但我需要彼得-1,彼得-2,彼得-3,彼得-4。怎么搞错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 02:04:47

,我想你在找这样的东西:

代码语言:javascript
复制
function eliminateDuplicates() {

    var repeats = {};
    var error = false;

    //cache inputs
    var $inputs = $("input[type='text']");

    //loop through inputs and update repeats
    for (i = 0; i < $inputs.length; ++i) {
        //cache current element
        var cur = $inputs[i];

        //remove class
        $(cur).removeClass("double-error");

        //get text of this element
        var text = $(cur).val();

        //no text -- continue
        if (text === "") {
            continue;
            }
        //first time we've came across this value -- intialize it's counter to 1
        if ((text in repeats) === false) {
            repeats[text] = 1;
            }
        //repeat offender. Increment its counter.
        else {
            repeats[text] = repeats[text] + 1;
            }

        //update the the value for this one
        $(cur).val(text + "-" + repeats[text]);
        }

    return error; // always returns false since I'm not sure
                  // when it's supposed to return true.
    }

PS:,我不明白什么时候error应该是true,所以总是false。不过,这应该足以让你走了。

PPS: 这里的柱塞。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39367694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档