使用Javascript的数组模式

时间:2015-03-17 20:31:07

标签: javascript arrays

我有一个数组:Myarray=[1,0,0,1,0,1,1,0,0]

我想在模式1,0,1,0 ..

中显示数组的元素

我试图设置一个标志:

for (var i = 0; i < myArray.length; i++) {
  if (myArray[i] == flag) {
    newArray = newArray + myArray[i];
    if (flag == 0)
      flag = 1;
    else
      flag = 0;
  }

但问题是输出中没有显示不匹配的元素。

任何想法?感谢。

3 个答案:

答案 0 :(得分:3)

生成 1,0,1,0,... 新数组 长度等于myArray.length可以与Array.prototype.map

在一行中完成
var newArr = myArray.map(function (e, i) {return 1 - (i % 2);});

但是,使用循环可能更有效;

var newArr = [],
    i = myArray.length;
while (i-- > 0)
    newArr[i] = 1 - (i % 2);

newArr; // [1, 0, 1, 0, 1, 0, 1, 0, 1]

如果你想过滤掉连续重复的项目,你可以使用Array.prototype.filter和过滤器功能之外的变量来记住你上次看到的内容

var newArray = (function () {
    var last;
    return myArray.filter(function (e) {
        var t = last;
        last = e;
        if (t === last)
            return false;
        return true;
    });
}());

或者再次循环

var newArr = [],
    last,
    i;
for (i = 0; i < myArray.length; ++i)
    if (last !== myArray[i]) {
        last = myArray[i];
        newArr.push(last);
    }

newArr; // [1, 0, 1, 0, 1, 0]

答案 1 :(得分:0)

只需将newArray初始化为Array的第一个元素,然后输入for循环检查,如果下一个值不等于new数组的最后一个元素。您的代码将类似于:

newArray[0]=myArray[0];
for (var i = 1; i < myArray.length; i++) {
    if(newArray[i-1]!=myArray[i]) {
         newArray.push(myArray[i]);
    }
}

答案 2 :(得分:0)

仅拉出与模式匹配的元素:

var a   = [1,0,0,1,0,1,1,0,0],
    pat = [1,0,1,0,1,0,1,0,1],
    matched = a.map(function(a1, idx) { return a[idx] === pat[idx] ? a1 : null } );

console.log(matched); // [1, 0, null, null, null, null, 1, 0, null]