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

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 回答
0

只是使用filter() 方法的另一个实现:参见示例小提琴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 回答