从数组中删除空字符串,同时保留非空字符串索引的记录

时间:2013-08-07 20:32:15

标签: javascript arrays string

假设我有一个数组如下:

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

从此我想生成以下两个数组:

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

 0, 1, 3, 4, 6

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

更新

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

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

var nonEmptyStrings = [];
var nonEmptyIndices = [];
["I", "am", "", "still", "here", "", "man"].forEach(function (str, i) {
    if (str != '') {
        nonEmptyStrings.push(str);
        nonEmptyIndices.push(i);
    }
});

答案 2 :(得分:0)

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