JavaScript数组-数组案例

136 阅读3分钟

在JavaScript中,数组是一种非常强大且灵活的数据结构,它允许我们以有序的方式存储多个值。无论是处理简单的列表还是复杂的数据集合,数组都能提供丰富的内置方法来帮助我们完成任务。本文将通过几个实际案例展示如何使用JavaScript数组解决具体问题。

案例1:统计数组中的偶数个数

假设我们需要编写一个函数,该函数接收一个整数数组作为参数,并返回其中偶数的个数。

function countEvens(arr) {
    return arr.filter(num => num % 2 === 0).length;
}

let numbers = [1, 2, 3, 4, 5, 6];
console.log(countEvens(numbers)); // 输出: 3

解释:

  • 使用 filter() 方法筛选出所有偶数。
  • 计算筛选后的数组长度即为偶数的个数。

案例2:合并两个已排序的数组

给定两个已经按升序排列的数组,要求编写一个函数将它们合并成一个新的升序数组。

function mergeSortedArrays(arr1, arr2) {
    let mergedArray = [];
    let i = 0, j = 0;

    while (i < arr1.length && j < arr2.length) {
        if (arr1[i] < arr2[j]) {
            mergedArray.push(arr1[i]);
            i++;
        } else {
            mergedArray.push(arr2[j]);
            j++;
        }
    }

    // 如果还有剩余元素
    return mergedArray.concat(arr1.slice(i)).concat(arr2.slice(j));
}

let arr1 = [1, 3, 5];
let arr2 = [2, 4, 6, 8];
console.log(mergeSortedArrays(arr1, arr2)); // 输出: [1, 2, 3, 4, 5, 6, 8]

解释:

  • 使用双指针技术遍历两个数组,比较当前元素并将较小者加入到结果数组中。
  • 最后处理未遍历完的数组部分,将其直接追加到结果数组末尾。

案例3:反转字符串(使用数组)

实现一个函数,接受一个字符串并返回其反转版本。我们可以先将字符串转换为数组,利用数组的 reverse() 方法,然后再转回字符串。

function reverseString(str) {
    return str.split('').reverse().join('');
}

console.log(reverseString("hello")); // 输出: "olleh"

解释:

  • split('') 将字符串分割成字符数组。
  • reverse() 反转数组顺序。
  • join('') 将数组重新组合成字符串。

案例4:查找数组中的最大连续子序列和

给定一个整数数组,找到具有最大和的连续子数组(至少包含一个数字),并返回其和。

function maxSubArraySum(arr) {
    let maxSoFar = arr[0];
    let currentMax = arr[0];

    for (let i = 1; i < arr.length; i++) {
        currentMax = Math.max(arr[i], currentMax + arr[i]);
        maxSoFar = Math.max(maxSoFar, currentMax);
    }

    return maxSoFar;
}

let nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4];
console.log(maxSubArraySum(nums)); // 输出: 6

解释:

  • 使用动态规划的思想,维护两个变量:currentMax 表示以当前位置结尾的最大子序列和;maxSoFar 存储迄今为止的最大子序列和。
  • 对于每个元素,决定是将其加入到当前序列还是开始一个新的序列。

案例5:扁平化多维数组

有时我们会遇到嵌套数组的情况,需要将其转换为一维数组。下面是一个递归方法来实现这一点:

function flattenArray(arr) {
    return arr.reduce((acc, val) => 
        Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val), []);
}

let nestedArray = [1, [2, [3, 4], 5], 6];
console.log(flattenArray(nestedArray)); // 输出: [1, 2, 3, 4, 5, 6]

解释:

  • 使用 reduce() 方法遍历数组。
  • 如果当前项是数组,则递归调用 flattenArray() 并将其结果与累加器连接起来。
  • 否则直接将该项添加到累加器中。

结语

感谢您的阅读!如果您对JavaScript数组或者其他相关话题有任何疑问或见解,欢迎继续探讨。