4

我有一个数组说

['(','C','1','2',')']

现在我想从数组中修剪数据indexOf('C') + 2,如果它是一个数字,我需要从数组中删除它。所以对于上面的例子,最终数组必须是

 ['(','C','1',')']

例如,如果我['(','C','1','2','3','*',')']希望将其修剪为['(','C','1','*',')'],则在元素“C”之后只允许使用一个数字。

我知道我可以通过获取 indexOf('C') 来遍历数组,然后检查每个元素的数字..但是帮助我用一些有效和更好的方法。比如使用拼接什么的。

4

3 回答 3

3

如果您要“修剪”的位置已知,则可以filter在此处使用,例如:

var a = ['(','C','1','2','3','*',')']
        .filter( function(a){
                   this.x += 1; 
                   return this.x<=2 ? a : isNaN(+a);}, {x:-1} 
         );

这可能导致此Array扩展:

Array.prototype.trimNumbersFrom = function(n){ 
    return this.filter( function(a){
                         this.x += 1; 
                         return this.x<=n ? a : isNaN(+a);
                        }, {x:-1} 
           );
};
//=> usage
var a = ['(','C','1','2','3','*',')'].trimNumbersFrom(2);
    //=> ["(", "C", "1", "*", ")"]

也可以看看 ...

于 2013-03-25T06:19:02.457 回答
2
var a = ['(','C', 'a', '8','2',')'].join("").split("C");
var nPos = a[1].search(/[0-9]/g);
var firstNumber = a[1][nPos];
var b = a[1].split(n);

// rebuild
a = a[0] + "C" + b[0] + firstNumber + b[1].replace(/[0-9]/g, "");

未经彻底测试,但对于您的情况,它可以工作。

于 2013-03-25T05:59:38.673 回答
1

您可以使用isNaN()函数,如果它是有效数字则返回 false,如果它不是数字则返回 true

var str = ['(','C','1','2','3','4','*',')']; // Your Input
var temp = [],count = 0;

for(var i=0;i<str.length;i++)
{
   if(i<str.indexOf('C') + 2)
   {
      temp[count] = str[i];
      count++;
   }
   else
   {
      if(isNaN(str[i]) == true)
      {
        temp[count] = str[i];
        count++;
      }      
   }
 }
str = temp;
alert(str);

现场演示

于 2013-03-25T06:10:33.367 回答