4

私は配列に言います

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

ここで、から始まる配列からデータをトリミングしたいのですindexOf('C') + 2が、それが数字の場合は、配列から削除する必要があります。したがって、上記の例では、最終的な配列は次のようになります。

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

たとえば、['(','C','1','2','3','*',')']トリミングしたい場合['(','C','1','*',')']、要素「C」の後には1つの数字のみが許可されます。

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 に答える