在 JavaScript 中,数组和对象是最常用的数据结构。它们允许我们组织和存储数据,是构建复杂应用程序的基础。
数组是一种有序的数据结构,可以存储多个值。在 JavaScript 中,数组可以包含不同类型的元素。
// 创建数组const fruits = ['苹果', '香蕉', '橙子'];const mixed = [1, 'hello', true, { name: '张三' }];// 访问数组元素console.log(fruits[0]); // '苹果'console.log(fruits.length); // 3// 修改数组元素fruits[1] = '葡萄';console.log(fruits); // ['苹果', '葡萄', '橙子']// 添加和删除元素fruits.push('西瓜'); // 添加到末尾console.log(fruits); // ['苹果', '葡萄', '橙子', '西瓜']fruits.pop(); // 删除末尾元素console.log(fruits); // ['苹果', '葡萄', '橙子']fruits.unshift('柠檬'); // 添加到开头console.log(fruits); // ['柠檬', '苹果', '葡萄', '橙子']fruits.shift(); // 删除开头元素console.log(fruits); // ['苹果', '葡萄', '橙子']
JavaScript 提供了丰富的数组操作方法,让我们能够方便地处理数组数据。
const numbers = [1, 2, 3, 4, 5];// for 循环for (let i = 0; i < numbers.length; i++) {console.log(numbers[i]);}// for...of 循环for (const num of numbers) {console.log(num);}// forEach 方法numbers.forEach((num, index) => {console.log(`索引 ${index}: ${num}`);});
const numbers = [1, 2, 3, 4, 5];// map: 转换每个元素const doubled = numbers.map(num => num * 2);console.log(doubled); // [2, 4, 6, 8, 10]// filter: 过滤元素const evenNumbers = numbers.filter(num => num % 2 === 0);console.log(evenNumbers); // [2, 4]// reduce: 将数组减少为单个值const sum = numbers.reduce((total, num) => total + num, 0);console.log(sum); // 15
const fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜'];// indexOf: 查找元素索引console.log(fruits.indexOf('香蕉')); // 1console.log(fruits.indexOf('柠檬')); // -1 (未找到)// includes: 检查元素是否存在console.log(fruits.includes('橙子')); // trueconsole.log(fruits.includes('柠檬')); // false// find: 查找满足条件的第一个元素const numbers = [1, 2, 3, 4, 5];const found = numbers.find(num => num > 3);console.log(found); // 4
对象是键值对的集合,用于存储相关数据。
// 创建对象const person = {name: '张三',age: 25,isStudent: true,hobbies: ['读书', '游泳'],address: {city: '北京',street: '朝阳路'}};// 访问对象属性console.log(person.name); // '张三'console.log(person['age']); // 25console.log(person.address.city); // '北京'// 修改对象属性person.age = 26;person['isStudent'] = false;// 添加新属性person.email = 'zhangsan@example.com';// 删除属性delete person.hobbies;
const person = {name: '张三',age: 25,city: '北京'};// for...in 循环for (const key in person) {console.log(`${key}: ${person[key]}`);}// Object.keys()const keys = Object.keys(person);console.log(keys); // ['name', 'age', 'city']// Object.values()const values = Object.values(person);console.log(values); // ['张三', 25, '北京']// Object.entries()const entries = Object.entries(person);console.log(entries); // [['name', '张三'], ['age', 25], ['city', '北京']]
const obj1 = { a: 1, b: 2 };const obj2 = { c: 3, d: 4 };// 使用展开运算符const merged = { ...obj1, ...obj2 };console.log(merged); // { a: 1, b: 2, c: 3, d: 4 }// 使用 Object.assign()const merged2 = Object.assign({}, obj1, obj2);console.log(merged2); // { a: 1, b: 2, c: 3, d: 4 }
解构赋值是一种从数组或对象中提取值的便捷方式。
// 数组解构const numbers = [1, 2, 3];const [a, b, c] = numbers;console.log(a, b, c); // 1 2 3// 对象解构const person = { name: '张三', age: 25, city: '北京' };const { name, age } = person;console.log(name, age); // '张三' 25// 重命名变量const { name: userName, age: userAge } = person;console.log(userName, userAge); // '张三' 25// 默认值const { country = '中国' } = person;console.log(country); // '中国'
展开运算符(...)可以展开数组或对象。
// 数组展开const arr1 = [1, 2, 3];const arr2 = [4, 5, 6];const combined = [...arr1, ...arr2];console.log(combined); // [1, 2, 3, 4, 5, 6]// 对象展开const obj1 = { a: 1, b: 2 };const obj2 = { c: 3, d: 4 };const merged = { ...obj1, ...obj2 };console.log(merged); // { a: 1, b: 2, c: 3, d: 4 }// 函数参数function sum(...numbers) {return numbers.reduce((total, num) => total + num, 0);}console.log(sum(1, 2, 3, 4)); // 10
下面是一个简单的练习,帮助你熟悉数组和对象的基本操作。请尝试完成以下任务:
完成上述练习后,尝试以下扩展任务:
map
方法将水果名称转换为大写filter
方法筛选出长度大于 2 的水果