【发布时间】:2020-11-16 10:33:32
【问题描述】:
所以我有一个对象对象,其中每个内部对象都有它自己的 seq 属性,它指向它在大对象内的顺序。
例子:
const obj = {
'1': {
name: 'apple',
seq: 1,
id: 1,
},
'2': {
name: 'orange',
seq: 2,
id: 2,
},
'3': {
name: 'banana',
seq: 3,
id: 3,
},
}
我的目标是移动这些对象并相应地更新它们的seq。
例如
const obj = {
'1': {
name: 'apple',
seq: 1,
id: 1,
},
'3': {
name: 'banana',
seq: 2,
id: 3,
},
'2': {
name: 'orange',
seq: 3,
id: 2,
},
}
我知道我正在移动的对象的 ID 以及它正在移动的位置
我目前拥有的东西
const moveObjects = (objId, indexToMoveTo) => {
const objCopy = Object.values(obj).reduce((prev, curr) => {
// if element if the one we moved - set seq to index
if (curr.id === objId) {
prev[curr.id] = {
...curr,
seq: indexToMoveTo
};
} else if (curr.id !== objId) {
// if element is not the one and index is smaller - increase seq by one
if (curr.seq >= indexToMoveTo) {
prev[curr.id] = {
...curr,
seq: curr.seq + 1
};
}
// if index bigger than seq - return the element without modifying it
else if (curr.seq < indexToMoveTo) {
prev[curr.id] = {
...curr
};
}
}
return prev;
}, {})
return objCopy
}
这样做的问题是,当然,如果你移动一个元素几次,seq 开始增加到超过对象的长度,例如它可能变成 4、5、6。
这是 jsfiddle 的 link,以便更清楚地了解我的意思。 (第三个console.log)
我们将不胜感激所有解决此问题的帮助
【问题讨论】:
标签: javascript object