Javascript 对数组进行排序,以便将元素从一个位置移动到另一个位置,同时保持“order”字段不变
我试图根据数组的Javascript 对数组进行排序,以便将元素从一个位置移动到另一个位置,同时保持“order”字段不变,javascript,Javascript,我试图根据数组的顺序字段对数组进行排序,但遇到了一些麻烦 假设我有以下数组 const array = [ {order: 3, name: 'A'}, {order: 10, name: 'B'}, {order: 11, name: 'C'}, {order: 23, name: 'D'}, {order: 47, name: 'E'}, {order: 91, name: 'F'}, ]; 请注意,每个后续对象的order字段不会比上一个对象大1。这没关系——唯一
顺序
字段对数组进行排序,但遇到了一些麻烦
假设我有以下数组
const array = [
{order: 3, name: 'A'},
{order: 10, name: 'B'},
{order: 11, name: 'C'},
{order: 23, name: 'D'},
{order: 47, name: 'E'},
{order: 91, name: 'F'},
];
请注意,每个后续对象的order
字段不会比上一个对象大1。这没关系——唯一重要的是数组是按升序排列的
现在,假设我试着移动
{order: 47, name: 'E'}
到数组的第二位(array[1]
),同时保留所有顺序
值
新阵列看起来像
[
{order: 3, name: 'A'},
{order: 47, name: 'E'},
{order: 11, name: 'C'},
{order: 23, name: 'D'},
{order: 10, name: 'B'},
{order: 91, name: 'F'},
];
我试图以这样的方式对这个新数组进行排序,输出应该是:
[
{order: 3, name: 'A'},
{order: 10, name: 'E'},
{order: 11, name: 'B'},
{order: 23, name: 'C'},
{order: 47, name: 'D'},
{order: 91, name: 'F'},
];
我怎样才能做到这一点
我试过下面这种东西的不同组合,但都没有用
const compare = (a, b) => {
if (a.order < b.order) {
return -1;
} else if (a.order > b.order) {
const temp = a.id;
a.order = b.order;
b.order = temp;
return 1;
}
return 0;
}
array.sort(compare);
const compare=(a,b)=>{
如果(a.订单b.订单){
常数温度=a.id;
a、 订单=b.订单;
b、 订单=温度;
返回1;
}
返回0;
}
排序(比较);
在这里有点蠢。我做错了什么?我还尝试过使用
splice
将元素拉出其原始位置,并将其放置在新的预期位置,但在order
字段的排序方面遇到了问题。我认为在排序过程中改变数组不一定是个好主意。您可以提取数组中的订单并shift
以获取下一个订单?您也可以通过编程方式进行交换
const orders=[
{顺序:3,名称:'A'},
{顺序:47,名称:'E'},
{顺序:11,名称:'C'},
{顺序:23,名称:'D'},
{顺序:10,名称:'B'},
{顺序:91,名称:'F'},
];
函数排序器(){
常量allOrders=orders.map(({order})=>order);
排序((a,b)=>a-b);
退货订单。映射((订单)=>{
order.order=allOrders.shift();
退货单;
});
}
功能交换(idx1、idx2){
const ordersClone=orders.slice(0);
const tempOrder=orders[idx1]。order;
订单单[idx2]=订单[idx1];
OrdersOne[idx2]。订单=订单[idx2]。订单;
订单单[idx1]=订单[idx2];
ordersClone[idx1]。order=tempOrder;
退货通知单
}
控制台日志(排序器(命令));
控制台日志(交换(1,4))代码>
const arr=[{
订单:3,
姓名:“A”
},
{
订单:47,
名称:“E”
},
{
订单:11,
姓名:“C”
},
{
订单:23,
姓名:“D”
},
{
订单:10,
姓名:'B'
},
{
订单:91,
名称:“F”
},
];
arr.sort(函数(a,b){
返回a.订单-b.订单;
});
console.log(arr)
排序时不要尝试修改数组。相反:
用于将项目移动到新位置
调整移动项目所在数组子部分的order
参数:
函数移动(arr、从索引到索引){
//移动项目
const[itemToMove]=arr.splice(fromIndex,1);//从迭代器中获取下一项
阵列拼接(toIndex,0,itemToMove);
//迭代并调整索引
设指数=toIndex;
while(index!==fromIndex){
设nextIndex=fromIndex log(move(数组,4,1))代码>嗯,排序时不要更改顺序
。你不太可能得到你想要的结果。事实上,排序时最好不要更改任何对象,而不管排序标准是什么。为什么开始时order
和name
绑定在同一个数组中?您似乎希望将它们与另一个完全分开处理。移动后是否需要为E
设置顺序:10
?如中所示,您是否需要保留顺序
s,还是只需在间隙中查找任何值就可以了?我正在使用,并且正在尝试将请求的排序顺序保存到数据库中。记录按特定顺序排列,其中顺序
是唯一的。我正在尝试更改顺序。@VLAZ我需要保留顺序
我认为问题不是按顺序排序,而是用名称保留当前顺序,而是更新顺序
属性。(即A、e、C的顺序不正确)