从数组中提取序列

时间:2012-05-16 07:25:52

标签: javascript arrays multidimensional-array

从任意值数组开始,我希望能够提取给定值的所有序列。 所以,如果我开始使用这个

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

并搜索1.我想回来

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

我在AS中看到了一个实现,虽然不够清晰,我无法翻译:finding sequences in AS3 array

4 个答案:

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

答案 1 :(得分:0)

AS3 is based on 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);
}

答案 2 :(得分: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;

答案 3 :(得分:0)

使用filter() method的另一个实现: 参见示例小提琴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] ]