如何修复此forEach函数?

时间:2019-08-17 20:17:34

标签: javascript

我正在尝试使用此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) 
        } 
    } 
});

你能告诉我为什么吗?以及如何解决?

谢谢

2 个答案:

答案 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],
}

在您的情况下无需循环。