替换不是一个功能,没有结果

时间:2015-07-11 07:36:06

标签: javascript jquery

输出textarea没有结果,在控制台日志上说,TypeError:newarr.replace不是函数,这是我的jsfiddle:http://jsfiddle.net/ehillanichole/woykv768/1/

$('#generatebutton').on('click', function(){
        var arr = $('#input').val();
            arr = arr.replace(/\n/g, ', ');
            arr = arr.split(',');
      var newarr = []; check = 0; count = 0;
          for(i=0; i<arr.length; i++){
          if(check != arr[i]){ count = 1; check = arr[i]; } else { count++; }
          newarr.push(check + '.' + count);
      }
      newarr = newarr.replace(/, /g, '\n');
        $('#output').val(newarr);
});

我的预期结果是:

8000.1
8000.1
8000.2
8001.1
8001.2
8002.1
8003.1
8004.1
8004.2
8005.1

2 个答案:

答案 0 :(得分:1)

注意:正如其他人的评论中所提到的,newarr是一个数组,数组没有替换方法。

您必须从

更新您的代码
newarr = newarr.replace(/, /g, '\n');

newarr = newarr.join().replace(/, /g, '\n');

有关工作版本,请参阅http://jsfiddle.net/woykv768/3/

有关文档,请参阅http://www.w3schools.com/jsref/jsref_join.asp

答案 1 :(得分:0)

我很难相信所说的输出真的是你想要的:

8000.1
8000.1
8000.2
...

为什么前两个重复条目应该具有相同的计数,这与列表的其余部分不同,其中每个副本都会增加计数?这没有意义。

我实际上必须通过代码(由nikhil更新)来查看它是如何产生该结果的,因为乍一看它并不明显。这是因为当您生成拆分数组时,实际上您使用', '进行拆分,然后与','一起加入,因此数组以:

开头
[
    '8000'
    ' 8000'
    ' 8000',
    ...
]

第一个没有领先的空间,与其他人不同。这就是为什么第一个和第二个条目被视为不同的值 - 它们是!

任何有经验的程序员阅读此代码并查看输出都会认为这可能是一个错误,而不是预期的行为。

还有一些其他错误:您的一些变量缺少var语句,因此代码无意中创建了全局变量。你可能意味着checkcount在该行的开头用var声明,但仔细观察:行中需要一个逗号的分号。

此外,缩进是不一致的 - 使用一致的缩进有很大帮助。

最后,您可以通过删除前后拆分和连接以及使用$.map()创建输出数组来简化代码。我还在输入字符串上输入.trim(),因此如果在textarea的开头或结尾有一个额外的换行符,它仍然可以正常工作。

$('#generatebutton').on( 'click', function() {
    var input = $('#input').val().trim().split('\n');
    var count, last;
    var result = $.map( input, function( value ) {
        if( value != last ) {
            count = 1;  last = value;
        } else {
            count++;
        }
        return value + '.' + count;
    });
    $('#output').val( result.join('\n') );
});

这会产生:

8000.1
8000.2
8000.3
8001.1
8001.2
8002.1
8003.1
8004.1
8004.2
8005.1

我不得不认为这更有可能是正确的输出。

如果你需要专门处理第一个重复组,可以很容易地修改这个代码来做到这一点,但我会在代码中使它非常明确,而不是看起来像是除第一个值之外的每个值前面的额外空间的意外影响。

这是一个updated fiddle