从嵌套数组中删除对象(如果您知道具体位置,请使用javascript)

从嵌套数组中删除对象(如果您知道具体位置,请使用javascript),javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个嵌套的对象数组。比如: [ { item: 'x', data: [ item: 'y', data: [ item: 'z', data: [...] ] ], ... } ] 我知道我要删除的项目位于位置[1,3,1,4]。是否有更快的方法删除阵列中的该项?下面是一个示例,说明如何执行此操作。我正在检索一个指向要变异的数组的指针,然后对它进行变异 此代码没有做的是: 不处理

我有一个嵌套的对象数组。比如:

[
  {
    item: 'x',
    data: [
      item: 'y',
      data: [
        item: 'z',
        data: [...]
      ]
    ],
    ...
  }
]

我知道我要删除的项目位于位置
[1,3,1,4]
。是否有更快的方法删除阵列中的该项?

下面是一个示例,说明如何执行此操作。我正在检索一个指向要变异的数组的指针,然后对它进行变异

此代码没有做的是:

  • 不处理给定值不正确的情况(错误索引)
  • 钥匙不存在
此代码的作用是:

  • 处理我们移除第一项或深层项的情况
  • 句柄X嵌套级别
  • 对给定对象进行变异
const arr=[{
项目:“x”,
数据:[{
项目:“y”,
数据:[{
项目:“z”,
数据:[],
}],
},
{
项目:“y2”,
数据:[{
项目:“z”,
数据:[{
项目:“a”,
数据:[],
}, {
项目:“b”,
数据:[],
}, {
项目:“toRemove”,
数据:[],
}],
}],
}, {
项目:“y3”,
数据:[{
项目:“z”,
数据:[],
}],
},
],
}];
// /!\ 对给定对象进行变异
功能移除TPOS(obj、pos){
//因为我们寻找一个指针,所以我们不会全力以赴
//或者我们将改变数据的副本,而不是给定的对象数据
常量allExceptLast=位置切片(0,位置长度-1);
//如果我们有第一项或没有第一项,三元是来处理这个问题的
//第一项不以“数据”开头
const ptr=allExceptLast.reduce((tmp,x)=>tmp.data?
tmp.数据[x]:
tmp[x],obj);
//最后移除阵列中需要的部分
(ptr.data | | ptr).拼接(位置[pos.length-1],1);
}
removeAtPos(arr[0,1,0,2]);

控制台日志(arr)下面是一个我将如何做的示例。我正在检索一个指向要变异的数组的指针,然后对它进行变异

此代码没有做的是:

  • 不处理给定值不正确的情况(错误索引)
  • 钥匙不存在
此代码的作用是:

  • 处理我们移除第一项或深层项的情况
  • 句柄X嵌套级别
  • 对给定对象进行变异
const arr=[{
项目:“x”,
数据:[{
项目:“y”,
数据:[{
项目:“z”,
数据:[],
}],
},
{
项目:“y2”,
数据:[{
项目:“z”,
数据:[{
项目:“a”,
数据:[],
}, {
项目:“b”,
数据:[],
}, {
项目:“toRemove”,
数据:[],
}],
}],
}, {
项目:“y3”,
数据:[{
项目:“z”,
数据:[],
}],
},
],
}];
// /!\ 对给定对象进行变异
功能移除TPOS(obj、pos){
//因为我们寻找一个指针,所以我们不会全力以赴
//或者我们将改变数据的副本,而不是给定的对象数据
常量allExceptLast=位置切片(0,位置长度-1);
//如果我们有第一项或没有第一项,三元是来处理这个问题的
//第一项不以“数据”开头
const ptr=allExceptLast.reduce((tmp,x)=>tmp.data?
tmp.数据[x]:
tmp[x],obj);
//最后移除阵列中需要的部分
(ptr.data | | ptr).拼接(位置[pos.length-1],1);
}
removeAtPos(arr[0,1,0,2]);

控制台日志(arr)请访问,看看有什么和。做一些研究,搜索相关话题等;如果你被卡住了,张贴一份你的尝试,记下输入和预期输出。您应该更了解近10K Rep,您可以记录整个阵列并确定要删除的项目吗?我不认为这是有效的JS语法?@mplungjan请更具体地回答我的问题,我很乐意解决它。我在网上搜索了这么多,但没有找到一个合理的答案来回答我的问题。我很乐意在得到直接和建设性的反馈后调整我的问题。请发布一个真实的数据样本。您的伪代码不明确。请访问,查看和。做一些研究,搜索相关话题等;如果你被卡住了,张贴一份你的尝试,记下输入和预期输出。您应该更了解近10K Rep,您可以记录整个阵列并确定要删除的项目吗?我不认为这是有效的JS语法?@mplungjan请更具体地回答我的问题,我很乐意解决它。我在网上搜索了这么多,但没有找到一个合理的答案来回答我的问题。我很乐意在得到直接和建设性的反馈后调整我的问题。请发布一个真实的数据样本。你的伪代码模棱两可。在我多年的开发工作中,我从来没有见过if/else缩写与逗号
a一起使用?b:c,d
就像你在房间里做的那样。这是速记的一个特点还是减少?我在哪里可以读到更多关于它的信息?有reduce
reduce(func,起始值)然后是函数内部的三元数。没有什么特别的。以下内容相同:
allExceptLast.reduce((tmp,x)=>(tmp.data?tmp.data[x]:tmp[x]),obj)
。它是,Array.reduce,trialent和arrow函数之间的组合单行语法在我多年的开发过程中,我从来没有见过if/else缩写与逗号
a一起使用过?b:c,d
就像你在房间里做的那样。这是速记的一个特点还是减少?我在哪里可以读到更多关于它的信息?有reduce
reduce(func,起始值)然后是函数内部的三元数。没有什么特别的。以下内容相同:
allExceptLast.reduce((tmp,x)=>(tmp.data?tmp.data[x]:tmp[x]),obj)
。它是,Array.reduce,三元和