0

任意の値の配列から始めて、特定の値のすべてのシーケンスを抽出できるようにしたいと考えています。だから私がこれで始めたら

[1,0,1,1,1,1,0,0]

1を検索しました。戻りたいです

[[1],[1,1,1,1]]

AS での実装を見たことがありますが、翻訳するのに十分明確ではありません: AS3 配列でのシーケンスの検索

4

4 に答える 4

1

コードコメントを付けてゼロから書きました:

function makeSequence(input, val) {
    var output = [], current = [];

    for (var i = 0; i < input.length; i++) {
        if (input[i] === val) {
            // if we have a matching value, add it to
            // the current match
            current.push(val);
        } else if (current.length) {
            // no match on current value, write out
            // any previous match
            output.push(current);
            current = [];
        }
    }
    // when done, make sure to add the last match
    if (current.length) {
        output.push(current);
    }
    return(output);
}

ここでの動作デモ: http://jsfiddle.net/jfriend00/YvsET/

于 2012-05-16T08:21:45.507 に答える
0

filter() メソッドを使用した別の実装: fiddle の例を参照http://jsfiddle.net/NNmwr/2

var data         = [1,0,1,1,1,1,0,0],
    sequence_one = [];
    result       = [];

data.filter(function(d, i) {
   var current = data[i],
       prev    = data[i-1] || 0;

   if (current) {
      sequence_one.push(1);
      if (i === data.length -1) {
          result.push(sequence_one);    
      }
   }
   else {       
      if (prev) {
        result.push(sequence_one);
        sequence_one = [];
      }
   }
})

console.log(result); // [ [1], [1,1,1,1] ]
于 2012-05-16T07:52:40.037 に答える
0

AS3 は ECMAScript に基づいているため、(識別子を除いて) ほとんど互換性があり、JS に簡単に変換できます。この変換されたバージョンのコードを試してください (多かれ少なかれ、識別子を取り除いただけです)。

var prev = '',
    q = 0,
    result = [],
    numbers = [1, 0, 1, 1, 1, 1, 0, 0],
    i;
for (i = 0; i < numbers.length; ++i) {
    if (prev != numbers[i]) {
        if (q > 0) {
            result.push(q);
        }
        q = 1;
        prev = numbers[i];
    } else {
        ++q;
    }
}
if (q > 0) {
    result.push(q);
}
于 2012-05-16T07:29:10.033 に答える
0
var prev = '',q = 0, numbers = [1,0,1,1,1,1,0,0];
for(var i=0; i<numbers.length; i++){   
 if(prev!=numbers[i]){      
   if(q>0) 
     result.push(q);
   q=1;    
   prev=numbers[i];
  }   
   else 
      q++; 
} 
if(q>0) 
   result.push(q);
return result;
于 2012-05-16T07:36:03.760 に答える