我正在尝试使用此forEach函数,但是它不起作用:
arr = [ 0, 50, 0, 14]
基本上我想使用数组的值在嵌套的for循环中使用:
arr.forEach(([x1, x2, y1, y2]) => {
for (let x = x1; x < x2; ++x) {
for (let y = y1; y < y2; ++y) {
doSomething(x,y)
}
}
});
你能告诉我为什么吗?以及如何解决?
谢谢
答案 0 :(得分:0)
您不应该使用forEach,因为它将迭代数组。对于您的用例,可以使用数组解构。
let arr = [0, 50, 0, 14];
let [x1, x2, y1, y2] = arr;
for (let x = x1; x < x2; ++x) {
for (let y = y1; y < y2; ++y) {
doSomething(x,y)
}
}
此处提供有关解构分配的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
您的forEach无效,因为您希望所有四个元素都在一次迭代中返回,因此为了使forEach像您提到的那样工作,应将元素数组封装在另一个数组中,例如
let arr = [[0, 50, 0, 14]];
arr.forEach(([x1, x2, y1, y2]) => {
for (let x = x1; x < x2; ++x) {
for (let y = y1; y < y2; ++y) {
doSomething(x,y)
}
}
});
它现在可以正常工作,因为您正在破坏数组的第一项,即包含四个元素的数组。这意味着您要使用解构将arr [0]设为[0,50,0,14]并将其分配给[x1,x2,y1,y2]。与
相同arr.forEach(item => {
const [x1, x2, y1, y2] = item
...
答案 1 :(得分:-1)
我猜您想将数组转换为对象。
const obj = {
myx1: arr[0],
myx2: arr[1],
myy1: arr[2],
myy2: arr[3],
}
在您的情况下无需循环。