js 删除对象中的某个值 合并数组

这篇博客介绍了如何使用JavaScript进行数组操作。首先展示了如何在没有key的情况下删除对象数组中的特定值,通过findIndex和splice方法实现。接着演示了如何合并两个数组,使用concat方法将传入的两个数组合并成一个新的数组。这些基本操作对于前端开发中的数据处理至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:对象格式(没有key的情况下删除值):
在这里插入图片描述

//val是传过来要删除的值
//例如val == ‘小张’
deleteOneChange(val){
    var st = this.checkedStaff;
    const index = st.findIndex((role) => role === val)
    st.splice(index, 1)
},

结果:
在这里插入图片描述
2:合并数组
在这里插入图片描述

ScreeningLeaderSubmit(){
    let st =  this.checkedStaff //传过来的第一个数组
    let de =  this.checkedDepart //传过来的第二个数组
    var newArr = st.concat(de);
    console.log(newArr)
},

结果:
在这里插入图片描述

<think>我们讨论的是“数组对象”和“对象数组”这两个概念。根据引用内容,我们可以这样理解: 1. **数组对象**:在JavaScript中,数组本身也是一种特殊的对象(关联数组)。引用[1]明确指出:“在Javascript语言中,关联数组就是对象对象就是关联数组。” 因此,数组对象可以理解为数组类型的对象,即数组。 2. **对象数组**:指数组中的每个元素都是对象数组。引用[4]中给出了一个JSON数组的例子,实际上就是对象数组: ```javascript packJson = [ {"name":"zhang", "password":"123"}, {"name":"li", "password":"456"} ]; ``` ### 区别总结: - **数组对象**:强调数组本身是一个对象(因为JS数组对象的一种)。 - **对象数组**:强调数组的内容由多个对象组成。 ### 操作示例: #### 1. 数组对象(即普通数组)的操作: ```javascript // 创建数组 const arr = [1, 2, 3]; // 添加元素(注意:虽然数组对象,可以添加属性,但这不是常规操作) arr.foo = 'bar'; // 但这样添加的属性不会影响数组长度(引用[1]的例子) // 常用数组方法 arr.push(4); // 末尾添加元素 arr.pop(); // 移除末尾元素 arr.map(x => x * 2); // 映射新数组 ``` #### 2. 对象数组的操作: ```javascript // 创建对象数组 const users = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]; // 添加对象 users.push({ id: 3, name: 'Charlie' }); // 查找对象 const user = users.find(u => u.id === 2); // 返回 {id:2, name:'Bob'} // 修改对象 users[0].name = 'Alicia'; // 删除对象(按索引) users.splice(1, 1); // 删除索引为1的对象(Bob) // 遍历 users.forEach(user => console.log(user.name)); ``` ### JSON相关操作(引用[2][3][4]): - **JSON字符串 ↔ JSON对象(或对象数组)**: ```javascript // 对象数组JSON字符串 const jsonStr = JSON.stringify(users); console.log(jsonStr); // '[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]' // JSON字符串转对象数组 const parsedArray = JSON.parse(jsonStr); console.log(parsedArray[0].name); // 'Alice' ``` ### 注意事项: - 数组对象数组)可以使用数组方法(如`push`, `pop`, `map`等),也可以像对象一样添加属性(但不推荐,且不会影响数组长度)。 - 对象数组数组,因此可以使用数组的所有方法,但每个元素是对象,所以可以操作对象的属性。 - JSON数组本质上就是对象数组的字符串表示形式。 ### 常见问题解答: **Q: 如何判断一个变量是数组还是普通对象?** A: 使用`Array.isArray()`方法: ```javascript const arr = []; const obj = {}; console.log(Array.isArray(arr)); // true console.log(Array.isArray(obj)); // false ``` **Q: 对象数组如何按对象属性排序?** A: 使用`sort()`方法: ```javascript users.sort((a, b) => a.name.localeCompare(b.name)); // 按name排序 ``` **Q: 如何从对象数组中提取所有对象的某个属性?** A: 使用`map()`: ```javascript const names = users.map(user => user.name); // 得到所有名字的数组 ``` §§相关问题§§ 1. 如何合并两个对象数组? 2. 如何深度克隆一个对象数组? 3. 如何过滤对象数组中满足条件的对象? 4. JSON字符串和JS对象的区别是什么?</think>### 数组对象 vs 对象数组:核心区别与操作指南 #### 本质区别 1. **数组对象 (Array Object)** - JavaScript 中的**数组本身就是一种特殊对象**(引用[1]) - 键名是自动生成的数字索引(0,1,2...) - 拥有数组特有的方法和属性(如 `length`, `push()`) ```javascript const arr = [1, 2, 3]; console.log(typeof arr); // "object" console.log(arr.length); // 3 ``` 2. **对象数组 (Array of Objects)** - **元素为对象的常规数组** - 每个元素是独立的对象,拥有自己的键对 ```javascript const users = [ {id: 1, name: "Alice"}, {id: 2, name: "Bob"} ]; ``` #### 关键差异对比 | 特性 | 数组对象 | 对象数组 | |--------------|--------------------------|------------------------------| | **本质** | 数组本身是对象 | 数组元素是对象 | | **键名类型** | 自动数字索引 | 自定义字符串键名(在元素内) | | **长度属性** | 有 `length` 属性 | 有 `length` 属性 | | **JSON表示** | 方括号包裹 `[1,2,3]` | 方括号包裹对象 `[{...}]` | | **典型操作** | `push()`, `pop()`, `map` | 对象属性访问 + 数组方法 | --- ### 常用操作示例 #### 1. 数组对象操作 ```javascript // 创建数组对象 const arr = ["a", "b", "c"]; // 添加元素(两种方式) arr.push("d"); // 末尾添加 arr[arr.length] = "e"; // 等效操作 // 遍历 arr.forEach((item, index) => { console.log(`索引 ${index}: ${item}`); }); // 转为类数组对象(显式键名) const arrObj = {...arr}; /* 结果: { 0: "a", 1: "b", 2: "c", 3: "d", 4: "e" } */ ``` #### 2. 对象数组操作 ```javascript // 创建对象数组 const users = [ {id: 1, name: "Alice", age: 25}, {id: 2, name: "Bob", age: 30} ]; // 添加新对象 users.push({id: 3, name: "Charlie", age: 28}); // 查找对象 const user = users.find(u => u.id === 2); console.log(user.name); // "Bob" // 修改对象属性 users[0].age = 26; // 提取所有属性 const names = users.map(u => u.name); console.log(names); // ["Alice", "Bob", "Charlie"] ``` #### 3. JSON 转换(引用[3][4]) ```javascript // 对象数组JSON字符串 const jsonStr = JSON.stringify(users); /* 结果: '[{"id":1,"name":"Alice","age":26},{"id":2,"name":"Bob","age":30}]' */ // JSON字符串 → 对象数组 const parsedArray = JSON.parse(jsonStr); console.log(parsedArray[0].name); // "Alice" ``` --- ### 易混淆场景解析 1. **混合类型数组** ```javascript const mixed = [ "text", {key: "value"}, 123 ]; ``` - `mixed[0]` 是字符串(基本类型) - `mixed[1]` 是对象 - 此时数组同时包含基本类型和对象类型元素 2. **类数组对象** ```javascript const arrayLike = { 0: "a", 1: "b", length: 2 }; // 转为真实数组 const realArray = Array.from(arrayLike); ``` --- ### 最佳实践建议 1. **数组对象使用场景**: - 存储同质化数据(如数字列表) - 需要利用数组原生方法(`filter/map/reduce`) 2. **对象数组使用场景**: - 处理结构化数据(如用户列表) - 需要按属性查询/筛选数据 - 与后端 API 交互(JSON 格式) 3. **类型检查技巧**: ```javascript // 检查是否为数组 Array.isArray(arr); // true // 检查数组元素是否为对象 users.every(item => typeof item === "object"); // true ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值