从任意值数组开始,我希望能够提取给定值的所有序列。 所以,如果我开始使用这个
[1,0,1,1,1,1,0,0]
并搜索1.我想回来
[[1],[1,1,1,1]]
我在AS中看到了一个实现,虽然不够清晰,我无法翻译:finding sequences in AS3 array
答案 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);
}
答案 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] ]