Javascript:跳过数组中每 4 个项目
Javascript: Skipping every 4th item in array?
>我有一个充满像素颜色值的数组,按顺序排序(R, G, B, A, R, G, B, A...等(我正在尝试通过它们来更改 R、G 和 B 的值,但我想让 A 一个人呆着。专门跳过数组的第 4 个(或第 n 个(值的最佳方法是什么?
我想做什么:
- 对于每一帧,将第一个 R 值(数组中的第 1 项(增加 1。 在
- R 值中从 0 到 255。
- 当 R = 255 时,将其重置为 0 并将 G 值(数组中的第 2 项(增加 1。
- R 继续循环,从 0 到 255,每次增加 G,直到:
- 当 G = 255 时,将其重置为 0 并将 B 值(第 3 项(增加 1。
- 同样的事情,G循环每次增加B一个。
- 当 B = 255 时,将其重置为 0 并跳过 A 值(第 4 项!(,而是增加下一个 R 值,即第 5 项。然后无限期地继续这个广告,直到数组的末尾。
我正在做的项目是P5.js但我认为这个问题更特定于Javascript。
谢谢大家!
ETA:既然人们问我在这里用的是什么,你去:
var m = 0;
var array = [0];
function draw() {
var last = array[array.length-1];
loadPixels();
pixels[array[last]] += 1;
updatePixels();
if (pixels[array[last]] == 255) {
loadPixels();
pixels[array[last]] = 0;
updatePixels();
m += 1;
array.push(m);
}
}
这似乎工作得很好,我可以观察像素在颜色之间循环,但随后它们很快就会变成白色(可能是因为 if
语句在循环遍历 A 值后将 A 值重置为零。虽然我仍然希望它保持所有像素移动(有点像我在列表中描述的方式(,而不仅仅是做一个然后移动到下一个。
最初没有包括这个,因为我对Javascript仍然非常陌生,并且意识到到目前为止我的工作可能是如此深奥,以至于我担心大多数人都无法对它进行正面或反面。但如果可以的话,我想那就更好了。
您可以使用模算术非常简洁地执行此操作:
var myPixels = [255, 255, 255, 0.5, 255, 189, 22, 0.3];
function updatePixels(pixels) {
var shouldContinue = true,
i = 0;
for ( ; i < pixels.length && shouldContinue; i += 1) {
// Skip every 4th index
if (i % 4 !== 3) {
pixels[i] = (pixels[i] + 1) % 256;
// keep going as long as the current RGB value has just been reset to 0
shouldContinue = (pixels[i] === 0);
}
}
}
// EXAMPLE USAGE
console.log(myPixels);
updatePixels(myPixels);
console.log(myPixels);
updatePixels(myPixels);
console.log(myPixels);
运行时,这将生成输出:
[255, 255, 255, 0.5, 0, 189, 22, 0.3]
[0, 0, 0, 0.5, 0, 190, 22, 0.3]
[1, 0, 0, 0.5, 0, 190, 22, 0.3]
专门跳过数组的第 4 个(或第 n 个(值的最佳方法是什么?
这个想法是创建一个以i
作为索引的for
循环,并检查i % 4 != 3
是否为真。下面的代码将跳过数组的第 4n 项,其中 n
是一个正整数。
var arr = ['R', 'G', 'B', 'A', 'R', 'G', 'B', 'A', 'R', 'G', 'B', 'A', 'R', 'G',
'B', 'A', 'R', 'G', 'B', 'A','R'];
for (i = 0; i < arr.length; i++) {
if (i % 4 != 3) {
alert(arr[i]); // will display only R, G, and B
// do your thing here for R, G, and B
}
}
字符串元素仅供参考。您可以使用数字数组更改arr
并使用相同的for
循环。
工作演示:http://jsfiddle.net/o7epn1cb/
使用关键字 continue
跳过迭代:
for(var i = 0; i < ary.length; i++) {
if(i % 4 === 3) {
continue; // this keyword means skip following steps, jump to next iteration
}
// work to do
}
数组循环逻辑上跳过 4,然后在 RGB 上跳过三个嵌套循环来执行您想要的操作,请参见下文:
附言由于我的回答被错误地否决了,我添加了一个示例数组和一个控制台.log消息,为您提供一个完整的工作示例,您可以在 Node 或浏览器中运行该示例以查看它完全按照 OP 的要求进行操作。
var a=[0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4];
for(i=0;i<a.length;i+=4) // notice the i+=4 instead of i++, this the trick.
{
for(b=0;b<256;b++) {
for(g=0;g<256;g++) {
for(r=0;r<256;r++) {
a[i]=r; // R cycles from 0 to 255
console.log(i, a[i], a[i+1], a[i+2]);
}
a[i+1]=g; // G cycles from 0 to 255
}
a[i+2]=b; // B cycles from 0 to 255
}
}
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 按不同项目对对象数组进行排序
- 使用JavaScript或jQuery检查单选按钮选择是否与数组中的项目匹配
- JS:从整个数组中每次得到5个项目,并得到平均值
- 使用圆中的数组更改背景颜色项目
- 编辑CSV数组中的项目-快速CSV node.js
- 我可以限制我添加到数组中的项目数量吗
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 什么's JavaScript数组中项目的作用域
- 将项目放入数组中
- 使用 id 和 Javascript 从数组中删除项目
- (角度.js)如何通过过滤器计算数组中有多少项目
- 如何通过迭代对象数组来删除某些项目
- Lodash 从与值数组不匹配的数组中获取项目
- 发布要形成的 n 个项目的数组
- 查找数组中项目包含子字符串的索引
- 使用节点在 JSON 数组中搜索项目(最好不迭代)
- Javascript:从数组中删除包含带有侦听器的对象的项目的最佳方法
- 更新挖空中可观察数组中项目的属性
- JavaScript:如何在 for 循环期间跳过数组中的当前项目?(继续?