前端JavaScript篇之找出数组中重复的数字、js中数组是如何在内存中存储的?原生遍历数组的方式有哪些?请对以下数组,根据 `born` 的值降序排列

发布时间:2024年01月24日


找出数组中重复的数字

找出数组中的重复数字是一个常见的问题,下面提供两种不同的解决思路:

方法一:使用 Set 数据结构

function findDuplicate(nums) {
  const numSet = new Set()
  for (const num of nums) {
    if (numSet.has(num)) {
      return num // 返回重复的数字
    }
    numSet.add(num)
  }
  return null // 数组中没有重复数字
}

const numbers = [2, 3, 1, 0, 2, 5, 3]
const duplicate = findDuplicate(numbers)
console.log(duplicate) // 输出 2

请添加图片描述

思路: 使用 Set 数据结构,遍历数组元素,将每个元素添加到 Set 中。如果当前元素已经在 Set 中存在,说明是重复数字,直接返回。这种方法具有良好的性能,并且可以适用于未排序数组。

方法二:排序数组

function findDuplicate(nums) {
  nums.sort((a, b) => a - b)
  for (let i = 1; i < nums.length; i++) {
    if (nums[i] === nums[i - 1]) {
      return nums[i] // 返回重复的数字
    }
  }
  return null // 数组中没有重复数字
}

const numbers = [2, 3, 1, 0, 2, 5, 3]
const duplicate = findDuplicate(numbers)
console.log(duplicate) // 输出 2

思路: 将数组排序,然后遍历数组查找相邻元素是否相同。如果找到相同的元素,直接返回。这种方法简单直观,但改变了原始数组的顺序。

你可以根据需求选择合适的方法。这两种方法在不同情境下都能有效地找出数组中的重复数字。

js中数组是如何在内存中存储的?

在JavaScript中,数组的内存存储是通过对象来实现的。通俗地说,JavaScript中的数组实际上是一种特殊类型的对象。下面是详细的说明、效果和思路:

说明:
在JavaScript中,数组是一种特殊的对象,其元素通过索引进行访问。与普通对象不同的是,数组有一些额外的功能,比如length属性,以及一些内置的数组方法(如pushpopshiftunshift等)。

效果:

// 创建一个数组
const myArray = [10, 20, 30, 40]

// 访问数组元素
console.log(myArray[0]) // 输出: 10

// 使用数组方法
myArray.push(50) // 在数组末尾添加元素

console.log(myArray) // 输出: [10, 20, 30, 40, 50]

请添加图片描述

思路:

  1. 索引访问: 数组元素通过索引进行访问,每个元素在内存中有一个与其对应的索引。
  2. length属性: 数组对象有一个length属性,表示数组的长度。当你添加或删除元素时,length会自动更新。
  3. 额外的功能: 数组对象还具有一些额外的功能,如push用于在数组末尾添加元素,pop用于删除并返回数组的最后一个元素等。

总体而言,JavaScript中的数组是一种灵活而动态的数据结构,其内存存储采用对象的形式,通过索引进行元素的访问。

原生遍历数组的方式有哪些?

遍历数组的方式有多种,下面是一些参考:

  1. for循环:
    说明: 使用for关键字进行循环,通过索引遍历数组。
    效果:
let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i])
}

思路: 通过控制循环变量i的值,访问数组中的每个元素。

  1. for循环优化:
    说明:for循环中,通过将数组的长度缓存到一个变量,可以提高性能。
    效果:
for (let i = 0, len = arr.length; i < len; i++) {
  console.log(arr[i])
}

思路: 将数组的长度缓存,避免在每次循环时都计算数组的长度。

  1. forEach方法:
    说明: 使用数组的forEach方法,接受一个回调函数,对数组中的每个元素进行操作。
    效果:
arr.forEach(item => {
  console.log(item)
});

思路: 通过传入的回调函数,对数组中的每个元素进行操作。

  1. for…in循环:
    说明: 使用for...in语法,循环遍历对象的键。
    效果:
for (let key in arr) {
  console.log(arr[key])
}

思路: 遍历对象的键,不建议用于遍历数组,因为性能相对较低。

  1. for…of循环:
    说明: 使用for...of语法,用于遍历可迭代对象(例如数组、字符串等)的值。
    效果:
for (let value of arr) {
  console.log(value)
}

思路: 直接遍历数组中的值,性能较好,推荐用于遍历数组。

在以上示例中,手动测试的结果也印证了数组遍历的性能,其中for循环是性能最好的方式,而for...in相对较慢,不建议用于遍历数组。推荐使用for循环或for...of循环来遍历数组,具体选择取决于需求和性能要求。

请对以下数组,根据 born 的值降序排列

假设有一个包含对象的数组,每个对象都有一个 born 属性表示出生年份,现在需要根据这个属性的值降序排列数组。下面是一个通俗易懂的说明、效果和思路:

// 原始数组
const people = [
  { name: 'Alice', born: 1980 },
  { name: 'Bob', born: 1975 },
  { name: 'Charlie', born: 1990 },
  { name: 'David', born: 1985 }
]

// 根据 born 属性降序排列
people.sort((a, b) => b.born - a.born)

// 排序后的数组
console.log(people)

请添加图片描述

说明: sort 方法是 JavaScript 数组的内置方法,用于对数组元素进行排序。接受一个比较函数作为参数,该函数定义了排序的规则。

思路: 在比较函数中,通过 b.born - a.born 实现降序排列。如果结果为正数,则 b 在前;如果结果为负数,则 a 在前;如果结果为零,则它们相等,顺序不变。

效果: 排序后的数组将根据 born 属性的值降序排列,即从出生年份较晚的人到较早的人。在上述示例中,排序后的数组将按照出生年份降序排列。

根据具体情况和需求,你可以使用这种方法对包含对象的数组进行降序排列。

持续学习总结记录中,回顾一下上面的内容:
找出数组中重复的数字、js中数组是如何在内存中存储的?原生遍历数组的方式有哪些?请对以下数组,根据 born 的值降序排列

文章来源:https://blog.csdn.net/qq_37255976/article/details/135771929
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。