【问题标题】:How to keep the correct Object Index Sequence [JS]如何保持正确的对象索引序列 [JS]
【发布时间】:2020-10-23 15:53:50
【问题描述】:

如标题所述,通过从 Object 中删除某些项目,index sequence 变得杂乱无章。

假设你有这个对象:

var oObject = {
0:{"Name0":"Example0", "Number":13},
1:{"Name1":"Example1", "Number":13},
2:{"Name2":"Example2", "Number":13},
3:{"Name3":"Example3", "Number":13},
4:{"Name4":"Example4", "Number":13}
}

通过删除[3] Index,使用delete oObject[3],您将获得以下Object

var oObject = {
0:{"Name0":"Example0", "Number":13},
1:{"Name1":"Example1", "Number":13},
2:{"Name2":"Example2", "Number":13},
4:{"Name4":"Example4", "Number":13}
}

如您所见,oObject-Indexes 杂乱无章。

问题:有没有一种操作可以deleteentriesObjects保持干净到indexes

【问题讨论】:

  • 使用数组并用splice删除
  • See this。但是,我建议使用数组而不是带有数字键的对象。

标签: javascript object indexing


【解决方案1】:

由于您有一个 类似数组 对象,您可以使用Array#from 将其转换为数组,然后使用splice 将结果数组与给定索引一起返回并以原始对象形式返回数组使用Array#reduce:

var oObject = {
0:{"Name0":"Example0", "Number":13},
1:{"Name1":"Example1", "Number":13},
2:{"Name2":"Example2", "Number":13},
3:{"Name3":"Example3", "Number":13},
4:{"Name4":"Example4", "Number":13}
};

const delEntry = (oObject, idx) => {
 const arr = Array.from({...oObject, length: Object.keys(oObject).length});
 arr.splice(idx, 1);
 return arr.reduce((r, a, i) => { r[i] = a; return r; }, {});
}

console.log(delEntry(oObject, 3));

编辑

正如@VLAZ 在 cmets 中建议的那样,这可以通过直接在数组对象上使用数组方法 Array#splice 来完成:

var oObject = {
0:{"Name0":"Example0", "Number":13},
1:{"Name1":"Example1", "Number":13},
2:{"Name2":"Example2", "Number":13},
3:{"Name3":"Example3", "Number":13},
4:{"Name4":"Example4", "Number":13}
};
const delEntry = (oObject, idx) => {
  const o = {...oObject, length: Object.keys(oObject).length};
  Array.prototype.splice.call(o, idx, 1);
  const {length, ...rest} = o;
  return rest;
}
console.log(delEntry(oObject, 3))

【讨论】:

  • 您可以直接从对象中拼接出项目,因此无需转换为数组并返回。数组方法完全是通用的,因此您可以在非数组上执行它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2017-05-05
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2020-09-02
  • 2011-08-23
相关资源
最近更新 更多