【发布时间】:2019-03-08 10:41:40
【问题描述】:
我有一个对象数组:
const array = [
{
id: "5a2524432b68c725c06ac987",
customOrder: 1,
name: "One",
},
{
id: "5a2524432b68sgs25c06ac987",
customOrder: 2,
name: "Two",
},
{
id: "5a252wfew32b68c725c06ac987",
customOrder: 3,
name: "Three",
},
{
id: "5a25gffe32b68c725c06ac987",
customOrder: 4,
name: "Four",
},
{
id: "5a2524432b68c725c06acfee7",
customOrder: 5,
name: "Five",
},
{
id: "5a2524432b68c725c06ac556",
customOrder: 6,
name: "Six",
},
]
当我更新其中一个对象的 customOrder 并根据 customOrder 更新其他对象时,如果我将索引 2 更改为自定义顺序为 4,我需要编辑另一个对象的 customOrder元素,因此结果将是:
const array = [
{
id: "5a2524432b68c725c06ac987",
customOrder: 1,
name: "One",
},
{
id: "5a2524432b68sgs25c06ac987",
customOrder: 2,
name: "Two",
},
{
id: "5a25gffe32b68c725c06ac987",
customOrder: 3,
name: "Four",
},
{
id: "5a252wfew32b68c725c06ac987",
customOrder: 4,
name: "Three",
}
{
id: "5a2524432b68c725c06acfee7",
customOrder: 5,
name: "Five",
},
{
id: "5a2524432b68c725c06ac556",
customOrder: 6,
name: "Six",
},
]
我正在考虑使用 array.slice() 甚至使用 lodash _.putAt(),但我正在尝试一种实现最佳结果的简单方法
【问题讨论】:
-
我认为您必须使用一些排序功能。比如归并排序(只是一个例子)并应用基于
customOrder键的排序。 -
您已经在数组索引中有顺序,所以
customOrder是多余的。如果你想移动一些东西,就移动它;那么如果你仍然需要customOrder,用array.forEach((x. i) => x.customOrder = i + 1)重新标记它。 -
您的问题有 2 个问题陈述:1. 更新相关对象。因此,当您将索引
2处的对象更新为4时,您还必须回溯其他对象并对其进行更改。 2. 为了保持顺序,您必须对列表进行排序。 -
如果你改变了不相关的对象的顺序怎么办?