Javascript 用另一个替换json数组,但保持顺序

Javascript 用另一个替换json数组,但保持顺序,javascript,arrays,json,Javascript,Arrays,Json,我有一个用json响应的API,如下所示: {'items':[ {'id': 1, 'quantity': 3}, {'id': 4, 'quantity': 7}, {'id': 5, 'quantity': 1} ]} for (var i in response.items) { let current_item = response.items[i]; for (var i2 in original_i

我有一个用json响应的API,如下所示:

{'items':[
{'id': 1, 'quantity': 3},
{'id': 4, 'quantity': 7},
{'id': 5, 'quantity': 1}
]}
   for (var i in response.items) {
                   let current_item = response.items[i];
                   for (var i2 in original_items.items) {
                       if (original_items.items[i2].id === current_item.id) {
                           original_items.items[i2] = current_item;
                       }
                   }
               }
我在第页上做了这样的设置,它每15秒获取一次这个API,但是有一个问题,每次它在数组中有不同的顺序时(如果在示例中id=1的项位于第一位,则下次可能位于最后一位)。因为页面上的块也会改变它们的顺序。我试着这样对付它:

{'items':[
{'id': 1, 'quantity': 3},
{'id': 4, 'quantity': 7},
{'id': 5, 'quantity': 1}
]}
   for (var i in response.items) {
                   let current_item = response.items[i];
                   for (var i2 in original_items.items) {
                       if (original_items.items[i2].id === current_item.id) {
                           original_items.items[i2] = current_item;
                       }
                   }
               }

但它不是这样工作的。按id排序也不是可行的选择

按id排序应该是可行的。每当响应返回时(包括对初始请求的响应),对对象数组进行排序:

response.items.sort((a, b) => a.id - b.id);

按ID排序应该是可行的。每当响应返回时(包括对初始请求的响应),对对象数组进行排序:

response.items.sort((a, b) => a.id - b.id);


是否会删除阵列中的现有项?如果是这样,那么您希望在
original_items
中对该项目进行什么处理?您可以对项目进行排序,这样您就不需要检查以前的项目,因为以前的项目也会被排序到api代码的后面。为什么“按id排序也不是可行的选项”不是一个选项?!?我相信这正是你应该做的。确定性能如果它不再在新数组中,那么它应该从结果中删除。是否删除数组中的现有项?如果是这样,那么您希望在
original_items
中对该项目进行什么处理?您可以对项目进行排序,这样您就不需要检查以前的项目,因为以前的项目也会被排序到api代码的后面。为什么“按id排序也不是可行的选项”不是一个选项?!?我相信这正是你应该做的。某些性能如果它不再在新数组中,那么它应该从结果中删除原始对象可能不会按asc或desc排序,对吗?问题是按照原始的对象顺序排序,比如1,4,5,这是正确的,阿巴斯巴迪亚,我想保留原始的order@Andrew由于排序顺序听起来不明确,只需对所有API响应进行排序,包括原始响应。在这种情况下,您可以首先通过执行类似以下操作快速克隆它:
let sortedItems=response.items.slice().sort((a,b)=>a.id-b.id)
。然后使用
sortedItems
@CertainPerformance我想这是最合乎逻辑的方式,感谢原始对象可能没有按asc或desc排序,对吗?问题是按照原始的对象顺序排序,比如1,4,5,这是正确的,阿巴斯巴迪亚,我想保留原始的order@Andrew由于排序顺序听起来不明确,只需对所有API响应进行排序,包括原始响应。在这种情况下,您可以首先通过执行类似以下操作快速克隆它:
let sortedItems=response.items.slice().sort((a,b)=>a.id-b.id)
。然后使用
sortedItems
@CertainPerformance我想这是最符合逻辑的方式,谢谢