首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有一种方法可以删除JavaScript中的记录,同时保持记录的顺序和编号顺序

有没有一种方法可以删除JavaScript中的记录,同时保持记录的顺序和编号顺序
EN

Stack Overflow用户
提问于 2018-10-18 07:04:15
回答 3查看 144关注 0票数 1

我在网上查看了从object中删除一条记录并用下一条可用记录替换已删除记录的id的各种方法,这意味着在JavaScript中使用delete运算符不会删除与之相关的记录id。假设我有一个对象:

obj= {
0:{},
1:{},
2:{},
3:{}
}

如果我想从该对象中删除一条记录,我会这样做的:

delete obj[1]

它会删除记录,但当我使用console.log(obj)命令时,我会看到:

obj= {
0:{},
2:{},
3:{}
}

我知道一种方法是将这个对象转换为数组,然后从数组中删除元素并将其转换回对象。如果我必须避免所有这些转换,当我们删除记录时,在JavaScript对象中有没有一种方法,当我们删除obj[1]记录时,obj返回如下:

obj= {
    0:{},
    1:{},
    2:{}
    }

相反,

obj= {
    0:{},
    2:{},
    3:{}
    }
EN

回答 3

Stack Overflow用户

发布于 2018-10-18 07:37:38

obj= {
  0:{a: 1},
  1:{b: 2},
  2:{c: 5},
  3:{d: 10}
}

const deleteElement = (index, obj) => {
    delete obj[index];
    return Object.keys(obj).reduce((agg, ele, i) => {
      agg[i] = obj[ele];
      return agg;
    }, {});
}

console.log(deleteElement(2, obj))

票数 2
EN

Stack Overflow用户

发布于 2018-10-18 07:27:57

如前所述,没有。但是转换它的一种快速方法可能是

let Array=Object.keys(obj).map(x=>{
return obj[x]});
console.log(array);
票数 1
EN

Stack Overflow用户

发布于 2018-10-18 07:30:24

我可以考虑在不映射到数组的情况下执行此操作的唯一方法是将对象中的所有属性向下复制一个,并删除最后一项。

var myObject = {
  0: {org: 0},
  1: {org: 1},
  2: {org: 2},
  3: {org: 3}
}


const removeIndex = (index, obj) => {
   var size = Object.keys(obj).length
   if (index<size-1) {
     for (let i = index; i<size-1; i++) {
       obj[i] = obj[i+1];       
     }
   }
   delete obj[size-1]   
}


removeIndex(1, myObject)
console.log(myObject)

但在现实中,您不应该使用对象来充当Array上的索引。我会修复服务器,如果你不能这样做,我会在页面加载时将其映射到一个数组中,并以这种方式使用它。如果服务器需要它,就把它映射回这个奇怪的对象。

如果你有一个大的对象,这个删除将需要一段时间,而在数组中,使用拼接将会很快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档