当前位置: 首页 > news >正文

JavaScript中对象和数组的常用方法

JavaScript 数组常用方法代码示例

一、遍历与转换

  1. forEach()
    遍历数组元素,执行回调函数:

    const arr = [1, 2, 3];
    arr.forEach((item, index) => {console.log(`索引:${index},值:${item}`);
    });
    // 输出:0 1 → 1 2 → 2 3
    
  2. map()
    转换数组元素,返回新数组:

    const doubled = [1, 2, 3].map(item => item * 2);
    console.log(doubled); // [2, 4, 6]
    
  3. reduce()
    聚合数组元素为单一值(如求和、扁平化数组):

    // 求和
    const sum = [1, 2, 3].reduce((acc, item) => acc + item, 0);
    console.log(sum); // 6
    // 扁平化二维数组
    const flattened = [[1, 2], [3]].reduce((acc, arr) => acc.concat(arr), []);
    console.log(flattened); // [1, 2, 3]
    

二、元素操作

  1. push() / pop()
    尾部增删元素:

    const arr = [1, 2];
    arr.push(3); // [1, 2, 3]
    arr.pop();   // [1, 2]
    
  2. splice()
    动态修改数组(删除、插入元素):

    const arr = [1, 2, 3];
    arr.splice(1, 1, 99); // 从索引1删除1个元素,插入99 → [1, 99, 3]
    
  3. slice()
    截取子数组(浅拷贝):

    const subArr = [1, 2, 3].slice(1, 3); // [2, 3]
    

三、过滤与查找

  1. filter()
    筛选满足条件的元素:

    const even = [1, 2, 3].filter(item => item % 2 === 0);
    console.log(even); // [2]
    
  2. find() / findIndex()
    查找首个符合条件的元素或索引:

    const found = [1, 2, 3].find(item => item > 1); // 2
    const index = [1, 2].findIndex(item => item === 2); // 1
    
  3. includes()
    判断是否包含某值:

    const hasTwo = [1, 2].includes(2); // true
    

四、排序与合并

  1. sort()
    按规则排序(默认字符串排序,需自定义数值排序):

    const sorted = [3, 1, 2].sort((a, b) => a - b); // [1, 2, 3]
    
  2. concat() / 扩展运算符
    合并数组(浅拷贝):

    const merged1 = [1, 2].concat([3]); // [1, 2, 3]
    const merged2 = [...[1, 2], ...[3]]; // [1, 2, 3]
    
  3. 自定义合并排序数组
    合并两个有序数组并保持顺序:

    function mergeSorted(a, b) {return [...a, ...b].sort((x, y) => x - y);
    }
    console.log(mergeSorted([1, 3], [2, 4])); // [1, 2, 3, 4]
    

JavaScript对象常用方法的DEMO代码示例


一、属性遍历与获取

  1. Object.keys() - 获取对象键数组
const person = { name: "Alice", age: 25 };
console.log(Object.keys(person)); // ["name", "age"] 
  1. Object.values() - 获取对象值数组
const scores = { math: 90, english: 85 };
console.log(Object.values(scores)); // [90, 85] 
  1. Object.entries() - 获取键值对数组
const car = { brand: "Tesla", model: "Model3" };
console.log(Object.entries(car)); 
// [ ["brand", "Tesla"], ["model", "Model3"] ] 

二、属性操作

  1. Object.assign() - 对象合并
const target = { a: 1 };
const source = { b: 2 };
const merged = Object.assign(target, source);
console.log(merged); // { a:1, b:2 }(注意是浅拷贝)
  1. Object.defineProperty() - 定义属性特性
const obj = {};
Object.defineProperty(obj, "id", {value: 1001,writable: false,enumerable: true
});
obj.id = 2000; // 修改无效(writable:false)
console.log(obj.id); // 1001 
  1. delete 操作符
const user = { name: "Bob", temp: "test" };
delete user.temp;
console.log(user); // { name: "Bob" } 

三、属性判断

  1. hasOwnProperty() - 检查自有属性
const animal = { type: "cat" };
console.log(animal.hasOwnProperty("type")); // true
console.log(animal.hasOwnProperty("toString")); // false(继承属性)
  1. in 操作符
const protoObj = { inheritedProp: true };
const myObj = Object.create(protoObj);
console.log("inheritedProp" in myObj); // true 

四、对象控制

  1. Object.freeze() - 冻结对象
const config = { apiUrl: "/data" };
Object.freeze(config);
config.apiUrl = "/new"; // 严格模式下报错
console.log(config.apiUrl); // "/data" 
  1. Object.seal() - 密封对象
const sealedObj = { x: 10 };
Object.seal(sealedObj);
sealedObj.x = 20; // 允许修改
sealedObj.y = 30; // 禁止添加
console.log(sealedObj); // { x:20 } 
  1. Object.create() - 原型继承
const parent = { greet() { return "Hello!" } };
const child = Object.create(parent);
console.log(child.greet()); // "Hello!" 

注意事项

  1. 浅拷贝问题:Object.assign 不会复制嵌套对象(需使用深拷贝工具)
  2. 冻结层级:Object.freeze 仅冻结第一层属性(需递归冻结嵌套对象)
  3. 原型链操作:Object.create(null) 创建无原型链的纯净对象

完整API文档可参考:MDN Web Docs - JavaScript Objects

相关文章:

  • rust-candle学习笔记13-实现多头注意力
  • 嵌入式STM32学习——继电器
  • 大模型微调算法原理:从通用到专用的桥梁
  • 解决mybatisplus主键无法自增的问题
  • Spring之AOP
  • Windows中安装nacos-server-2.4.2
  • webpack和vite区别
  • 《Python星球日记》 第52天:反向传播与优化器
  • MySQL事务和JDBC中的事务操作
  • Veins同时打开SUMO和OMNeT++的GUI界面
  • Visual Studio 2022 远程调试
  • C++字符串操作 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
  • 蓝桥杯嵌入式第十一届省赛真题
  • `RotationTransition` 是 Flutter 中的一个动画组件,用于实现旋转动画效果
  • 仓库管理系统,Java+Vue,含源码及文档,高效管理仓库物资,实现入库、存储、出库全流程数字化精准管控
  • 睿思量化小程序
  • Redis 哨兵
  • AI 入门资源:微软 AI-For-Beginners 项目指南
  • #Redis黑马点评#(四)优惠券秒杀
  • 基于定制开发开源AI智能名片S2B2C商城小程序的公私域流量融合运营策略研究
  • 体坛联播|穆勒主场完成拜仁谢幕战,山西车队再登环塔拉力赛
  • 谜语的强制力:弗洛伊德与俄狄浦斯
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小
  • 罗氏制药全新生物制药生产基地投资项目在沪启动:预计投资20.4亿元,2031年投产
  • 上海加力提速推进优化营商环境,明确“十大攻坚突破任务”
  • 从“重规模”向“重回报”转变,公募基金迎系统性改革