Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在更改关键点后移动阵列中的对象_Javascript_Arrays_Sorting_Object - Fatal编程技术网

Javascript 如何在更改关键点后移动阵列中的对象

Javascript 如何在更改关键点后移动阵列中的对象,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我有一个数组,其中的对象按键“顺序”排序 [ {order: 1, id: 1, title: elem1}, {order: 2, id: 2, title: elem2}, {order: 3, id: 3, title: elem3}, {order: 4, id: 4, title: elem4}, {order: 5, id: 5, title: elem5} ] 将'elem2'中的键'order'更改为'4'后,数组应如下所示 [ {order: 1, i

我有一个数组,其中的对象按键“顺序”排序

[
  {order: 1, id: 1, title: elem1},
  {order: 2, id: 2, title: elem2},
  {order: 3, id: 3, title: elem3},
  {order: 4, id: 4, title: elem4},
  {order: 5, id: 5, title: elem5}
]
将'elem2'中的键'order'更改为'4'后,数组应如下所示

[
  {order: 1, id: 1, title: elem1},  
  {order: 2, id: 3, title: elem3},
  {order: 3, id: 4, title: elem4},
  {order: 4, id: 2, title: elem2},
  {order: 5, id: 5, title: elem5}
]
我想在更改某个对象的双向键“顺序”后移动数组中的某个对象

您可以使用以下功能:

var elem1, elem2, elem3, elem4, elem5;
var arr = [
  {order: 1, id: 1, title: elem1},
  {order: 2, id: 2, title: elem2},
  {order: 3, id: 3, title: elem3},
  {order: 4, id: 4, title: elem4},
  {order: 5, id: 5, title: elem5}
];

arr[1].order = 4;
arr[3].order = 2;

arr.sort((a, b) => a.order > b.order);
您可以使用
.splice()
移动项目,并使用
.forEach()
更新
订单
属性

var-arr=[
{顺序:1,id:1,标题:'elem1'},
{顺序:2,id:2,标题:'elem2'},
{顺序:3,id:3,标题:'elem3'},
{顺序:4,id:4,标题:'elem4'},
{顺序:5,id:5,标题:'elem5'}
];
功能移动项(arr、from、to){
阵列拼接(至-1,0,阵列拼接(自-1,1)[0]);
arr.forEach(函数(e,i){e.order=i+1;});
}
移动项目(arr,2,4);
//格式化输出

log(JSON.stringify(arr.split('}',).join('},\n'))Array.prototype.sort可能与@Vld重复-它更像是一个“提取”和“插入回”操作。第3项也在移动。不确定如何使用排序来完成此操作。@Arnald By sorting排序就是这样,它默认或指定规则来排列元素。@Arnald说真的,伙计?排序的作用是它对东西进行排序<代码>对象。排序((a,b)=>a.order-b.order)
。这个复杂而不可理解的解决方案花了我5秒钟来实现。为什么不提供一个排序函数来比较每个元素的order属性值呢?我的意思是,你的方法看起来很脆弱,没有必要,不是吗?还有一个一小时前的工作示例。@DaveNewton我可能遗漏了什么,但我还是不明白。通过排序(就像其他答案一样),第3项将保持在相同的位置。这不是OP想要的。公平地说,如果两个顺序值相同,OP希望得到什么并不清楚。@DaveNewton我的理解是OP希望将元素A移到位置B,将A和B之间的所有元素移到数组的开头,然后更新“order”属性以反映新的排列。(或当B在A之前时,向数组末尾移动)