【发布时间】:2019-03-15 01:43:05
【问题描述】:
我有一个对象数组,类似于:
[
{
number: 1,
name: "A"
},
{
number: 2,
name: "e",
},
{
number: 3,
name: "EE",
}
]
我需要能够将一个对象插入到数组中的特定位置,但是我必须移动对象其余部分的所有数字,因此这些数字是按顺序排列的。 同样,我需要能够移除一个对象,但能够将所有数字移回。
即如果我在位置 1 插入名称:“F”,则数组变为:
[
{
number: 1,
name: "A"
},
{
number: 2,
name: "F"
},
{
number: 3,
name: "e",
},
{
number: 4,
name: "EE",
}
]
我知道一些可以做到这一点的方法,但没有一个看起来很漂亮。 在这里发表一些我的想法:
- 插入我做了
this.arr.splice(1, 0, newObj),然后尝试循环遍历this.arr,对于任何大于2的索引,我做了++number,这可行,但丑陋。 - 要插入我做了
this.arr.splice(1, 0, newObj),然后用let newArr = this.arr.split(2)拆分this.arr,然后用newArr.map(a => {...}),使用splice 将部分原始arr 替换为newArr。
新编辑: 在这里分享我的一些代码,这是可行的,但如果可能的话,我想简化它或让它更漂亮。请分享想法。
const newObj = {
number: obj.number + 1,
name: 'S',
}
this.arr.splice(obj.number, 0, newObj)
if (this.arr.length > obj.number) {
const remaining = this.arr.slice(obj.number + 1).map( (t) => ({...t, ...{number: t.number + 1}}))
this.arr.splice(newObj.number, remaining.length, ...remaining)
}
【问题讨论】:
-
您采取了哪些步骤来实现您正在寻找的不同变化?什么有效,什么无效?您在此处发帖之前是否尝试过搜索“将对象插入到特定位置的数组中”?
-
数字是否等于元素索引,或者它们是通过某种算法计算出来的?
-
@CharlieSchliesser 我编辑了原始帖子,在没有完成编辑的情况下意外发布了它。所以答案是,我不只是试图插入到特定位置,我希望能够增加其余对象的数量。我能够做到,但我的代码看起来很难看。想看看有没有更好的解决办法
-
@Cerberus 我更新了原帖。
-
我从事审计工作,所以我完全理解。
标签: javascript arrays typescript