javascript 如何将一个数组拆分成奇数和偶数,并将它们放入一个矩阵中,我做了什么:

3phpmpom  于 2023-02-07  发布在  Java
关注(0)|答案(3)|浏览(135)
function evenAndOdd(array1){
    const array1 = [1,2,3,4,5,6]
    const odd = []
    const even = []
    for (let i=0; i<array1.length; i++){
        if (i%2===0){
            even.push(array1[i]);
        }else {
            odd.push(array1[i])
        }
        array1.push(odd)
        array1.unshift(even)
    }
    return array1
}

这是我从控制台日志/用户代码/index.js:3 const array1 =[1,2,3,4,5,6]^中得到的结果。
语法错误:标识符"array1"已声明
我在期待:数组1 =[[2,4,6],[1,3,5]]

tct7dpnv

tct7dpnv1#

你也可以试试这个。

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const matrix = splitOddEven(arr);

console.log("Odd numbers:", matrix[0]);
console.log("Even numbers:", matrix[1]);

function splitOddEven(arr) {
    let odd = [];
    let even = [];

    for (let number of arr) {
        if (number % 2 === 0) {
            even.push(number);
        } else {
            odd.push(number);
        }
    }

    return [odd, even];
}
yjghlzjz

yjghlzjz2#

这个错误是正确的,你把array定义为函数的输入,也定义在函数体中,应该这样使用它:

const array1 = [1, 2, 3, 4, 5, 6]
const result = evenAndOdd(array1)

接下来,你的函数修改它的输入并返回它。我猜你只是想在不改变输入的情况下得到结果。所以我们这样修改它:

function evenAndOdd(array1) {
    const odd = []
    const even = []
    for (let i = 0; i < array1.length; i++) {
        if (i % 2 === 0) {
            even.push(array1[i]);
        } else {
            odd.push(array1[i])
        }
    }
    return [even, odd]
}

这个函数运行了,但是结果是错误的,输出是[ [ 1, 3, 5 ], [ 2, 4, 6 ] ],原因是你要检查索引是奇数还是偶数,但是检查的应该是输入数组中的值,你可以这样修改它:

if (array1[i] % 2 === 0) {
            even.push(array1[i]);
        } else {
            odd.push(array1[i])
        }

我还要将名称array1更改为input,以使该变量所代表的内容更加明显。
将所有内容放在一起,代码应如下所示:

function evenAndOdd(input) {
    const odd = []
    const even = []
    for (let i = 0; i < input.length; i++) {
        if (input[i] % 2 === 0) {
            even.push(input[i]);
        } else {
            odd.push(input[i])
        }
    }
    return [even, odd]
}

const input = [1, 2, 3, 4, 5, 6]
let result = evenAndOdd(input)
console.log(result)

另外,我更愿意在输入端使用过滤器来编写它,而不是使用for循环和索引

function evenAndOdd(input) {
    const odd = input.filter(x => x % 2 !== 0)
    const even = input.filter(x => x % 2 === 0)
    return [even, odd]
}
bn31dyow

bn31dyow3#

您的代码中存在一些逻辑问题:

  • 您正在重新定义函数的输入
  • 在每次迭代中,您都要将奇数组和偶数组追加到输入
console.log(evenAndOdd([1,2,3,4,5,6]));

function evenAndOdd(array1){
    const odd = [];
    const even = [];
    for (let i=0; i<array1.length; i++){
        if (i%2===0) {
            even.push(array1[i]);
        } else {
            odd.push(array1[i])
        }
    }
    
    return [odd, even];
}

相关问题