我有一个数组: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;
}
但问题是输出中没有显示不匹配的元素。
任何想法?感谢。
答案 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]