array push函数在数组中添加一个空索引

时间:2014-12-28 22:42:26

标签: javascript arrays split push

function spacing(num){
    var a=[];
    var aToStr="";
    for(i=0;i<num;i++) {
        a.push("&nbsp")
    }
    for(i=0;i<a.length;i++) {
        aToStr=a[i]+aToStr;
    }
    // alert(a.length);result is 5 here
    // alert(aToStr.split("&").length);//here result is 6 and when printed to screen theres an empty index
    return aToStr;
} 

正如我在代码中所解释的那样。数组中发生了一些事情,不知何故还会出现另外一个索引。 当我将它打印到屏幕上时,该索引中只有一个空格。

2 个答案:

答案 0 :(得分:1)

首先,您的问题应简化为:

为什么

"&nbsp&nbsp".split("&").length

是3而不是2?

为什么

"&".split("&").length

是2而不是0?

对于最后一个版本,答案是JavaScript认为你有2个空字符串 s(""):其中一个在分隔符之前,其中一个在它之后。为什么?这就是他们决定实现这个功能的方法=&gt; 只是一个决定。在Java中,类似的尝试将返回0

如果您认为这很奇怪,请注意"a".split("b").length返回1

因此,JavaScript会考虑answer = 1 + numberOfAppearancesForThatSeparator

答案 1 :(得分:0)

来自MDN

  

找到后,将从字符串中删除分隔符,并以数组形式返回子字符串。

错误说明:

  1. 开始使用split进行搜索,先找到&amp;

    &nbsp&nbsp&nbsp&nbsp&nbsp
    // & found and removed, resulting in  ' '
    // returnArrForSplit = ['']
    
  2. 查找第二个&amp;

    nbsp&nbsp&nbsp&nbsp&nbsp
    // & found and removed, everything before pushed to returnArrForSplit, 'nbsp'
    // returnArrForSplit = ['', nbsp]
    
  3. 第三&amp;

    nbsp&nbsp&nbsp&nbsp
    // & found and removed, resulting in  'nbsp'
    // returnArrForSplit = ['', nbsp, nbsp]
    
  4. 第四&amp;

    nbsp&nbsp&nbsp
    // & found and removed, resulting in  'nbsp'
    // returnArrForSplit = ['', nbsp, nbsp, nbsp]
    
  5. 最终&amp;

    nbsp&nbsp
    // & found and removed, resulting in  'nbsp'
    // returnArrForSplit = ['', nbsp, nbsp, nbsp, nbsp]
    
  6. 但是还剩下一个nbsp

    nbsp
    // added as last substring
    // returnArrForSplit = ['', nbsp, nbsp, nbsp, nbsp, nbsp]
    returnArrForSplit.shift()
    // removes unwanted empty string.
    
  7. 固定代码

    function spacing(num){
        var a=[];
        var aToStr="";
        for(i=0;i<num;i++) {
            a.push("&nbsp")
        }
        for(i=0;i<a.length;i++) {
            aToStr=a[i]+aToStr;
        }
    
        return aToStr;
    }
    
    var spaces = spacing(5);
    // "&nbsp&nbsp&nbsp&nbsp&nbsp"
    
    spaces = spaces.split('&');
    // ["", "nbsp", "nbsp", "nbsp", "nbsp", "nbsp"]
    
    spaces.shift() // returns ''
    // spaces is ["nbsp", "nbsp", "nbsp", "nbsp", "nbsp"]