js删除嵌套数组对象中的某项,并重置其后的索引

JS删除嵌套数组对象项并重置索引

场景
我有一个航线数组,里面的项的结构中包含另一个数组对象,我要对actions中的某一项进行操作

[
  {
   
   
    lng: 120.06494672131818,
    lat: 30.858276044948518,
    height: "120",
    aircraftHeading: 0,
    yawRotate: 0,
    pitchRotate: 0,
    rollRotate: 0,
    hangdiansetting: false,
    actions: [
      {
   
   
        actionId: 0,
        type: 6,
        actionActuatorFunc: "takePhoto",
        name: "单拍"
      },
      {
   
   
        actionId: 1,
        type: 11,
        actionActuatorFunc: "openAI",
        name: "开启AI识别"
      },
      {
   
   
        actionId: 2,
        
<think>嗯,用户现在的问题是在Vue2中如何从数组里提取特定项生成新数组。之前他们问过关于筛选不同ID的方法,现在可能是在同一项目中需要进一步处理数据。根据用户提供的引用内容,他们提到了计算属性、map方法以及数组合并操作,比如引用[2]中的map例子,还有引用[3]中的合并数组对象。 首先,我需要确定用户的具体需求。他们可能有一个对象数组,每个对象有多个属性,想提取其中某一属性组成新数组,比如所有ID或者名字。比如从[{id:1, name:'a'}, {id:2, name:'b'}]提取id得到[1,2]。 接下来,回顾之前的回答,用户已经了解计算属性和过滤方法。现在需要扩展使用map方法,因为引用[2]中的例子就是用map来提取字段。所以应该重点介绍map的基本用法,并结合Vue的计算属性来实现响应式。 然后,可能需要处理更复杂的情况,比如去重后的数组,这时候可以结合Set和map,如[...new Set(array.map(...))],这在之前的回答里也有类似的方法,用于筛选唯一ID。用户可能还需要处理多条件提取,比如同时提取多个字段,这时候可以用map返回对象。 另外,引用[3]提到合并两个数组的相同项,用户可能需要将两个数组合并并提取特定项。比如根据某个ID合并,然后提取数据。这时候可以用reduce方法或者find方法,如之前的分组方案。 需要注意的是,用户可能对性能有要求,特别是数据量大的情况。在之前的回答中提到了Web Worker和虚拟滚动,这里可以建议在计算属性中使用高效的数组方法,避免重复计算。 可能还需要提醒用户关于Vue的响应式问题,比如直接修改数组可能不会触发更新,应该使用Vue.set或者替换数组。例如,在提取数据后,如果需要修改原数组,应该用正确的方法。 总结步骤:1. 使用map方法提取单一字段;2. 结合Set去重;3. 提取多个字段并重命名;4. 多条件筛选;5. 动态参数提取;6. 处理数组合并的情况。同时给出注意事项,如性能优化和响应式问题。</think>在Vue2中从数组提取特定项生成新数组,可以通过以下5种方法实现(含代码示例与数学原理说明): --- ### 一、基础提取方法 #### 1. **`map`方法提取单字段** ```javascript computed: { // 提取所有ID组成新数组(线性时间复杂度$O(n)$) idArray() { return this.originalList.map(item => item.id) } } ``` 输入数组:`[{id:1,name:'a'}, {id:2,name:'b'}]` 输出结果:`[1, 2]` [^2] #### 2. **带筛选条件的提取** ```javascript filteredArray() { return this.originalList .filter(item => item.price > 100) // 筛选条件 .map(item => item.sku) // 提取字段 } ``` 满足不等式$price > 100$时提取sku字段 --- ### 二、高级提取方案 #### 3. **多字段提取与重命名** ```javascript formattedData() { return this.originalList.map(item => ({ newId: item.id * 2, // 字段转换 displayName: item.name.toUpperCase() // 字符串处理 })) } ``` 输出结构: $$ \text{[ {newId:2, displayName:"A"}, {newId:4, displayName:"B"} ]} $$ #### 4. **动态参数提取** ```javascript methods: { dynamicExtract(field) { return this.originalList.map(item => item[field]) } } ``` 调用方式:`this.dynamicExtract('price')` --- ### 三、跨数组联合操作 #### 5. **双数组合并提取(集合运算)** ```javascript mergedIds() { const setA = new Set(this.listA.map(item => item.id)) const setB = new Set(this.listB.map(item => item.id)) // 并集运算 $A \cup B = \{x | x \in A \lor x \in B\}$ return [...new Set([...setA, ...setB])] } ``` 时间复杂度:$O(m + n)$,空间复杂度$O(m + n)$[^3] --- ### 四、性能优化建议 | 数据量 | 推荐方案 | 时间复杂度 | |-------|---------|-----------| | <500 | 直接map | $O(n)$ | | 500-5000 | 分块处理 | $O(n/k)$ | | >5000 | Web Worker | 后台线程处理 | --- ### 五、注意事项 1. **响应式更新**:使用`Vue.set()`修改数组引用触发更新 2. **避免副作用**:在map回调中不要修改原始数据 3. **数据缓存**:对稳定数据使用`Object.freeze()` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值