【问题标题】:Remove empty strings from array while keeping record of indexes with non empty strings从数组中删除空字符串,同时记录非空字符串的索引
【发布时间】:2013-08-09 09:52:27
【问题描述】:

假设我有一个数组如下:

"I", "am", "", "still", "here", "", "man"

我希望由此产生以下两个数组:

"I", "am", "still", "here", "man"

 0, 1, 3, 4, 6

所以,一个没有空字符串的数组,也是一个包含非空字符串的数组索引的数组。从第一个生成这两个数组的好方法是什么?

更新:

在生成两个数组之后,我需要第一个数组完整。

【问题讨论】:

    标签: javascript arrays string


    【解决方案1】:
    var myArray = ["I", "am", "", "still", "here", "", "man"] ;
    
    var myNewArray = [] ;
    var myOldPosition = [] ;
    
    for(var i=0, max = myArray.length ; i < max ; i++){
        myArray[i] == '' ? true : myNewArray.push(myArray[i])
    
        myArray[i] == '' ? true : myOldPosition.push(i) 
    
    }
    console.log(myArray);//["I", "am", "", "still", "here", "", "man"] 
    console.log(myNewArray) ;//["I", "am", "still", "here", "man"] 
    console.log(myOldPosition);//[0, 1, 3, 4, 6]  
    

    DEMO

    【讨论】:

      【解决方案2】:

      遍历数组并检查每个元素是否为空。如果不是,则将其位置添加到一个数组,并将其值添加到另一个数组:

      var elems, positions
      for (var i = 0; i < arr.length; i++){
          if (arr[i] != ""){
              elems.push(arr[i])
              positions.push(i)
          }
      }
      

      编辑:这将为您留下 3 个数组(原始、元素、位置)。如果您只想修改原始版本,请使用arr.filter()

      【讨论】:

        【解决方案3】:
        var nonEmptyStrings = [];
        var nonEmptyIndices = [];
        ["I", "am", "", "still", "here", "", "man"].forEach(function (str, i) {
            if (str != '') {
                nonEmptyStrings.push(str);
                nonEmptyIndices.push(i);
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2016-05-30
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 2013-11-22
          • 2018-04-12
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          相关资源
          最近更新 更多