Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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_Html_Jquery_Arrays - Fatal编程技术网

Javascript 如何将数组中的多个项移动到数组中的不同索引?

Javascript 如何将数组中的多个项移动到数组中的不同索引?,javascript,html,jquery,arrays,Javascript,Html,Jquery,Arrays,我有一个包含7项的数组。我想将一些项以与原始数组中相同的顺序移动到不同的索引中。到目前为止,我已经将代码片段粘贴到了我尝试的任何东西上 let originalArray=['a','b','c','d','e','f','g']; 让itemsToBeMoved=['c','f','e']; 设newIndexToBeMoved=4; //预期结果为['a'、'b'、'd'、'c'、'e'、'f'、'g']; 设movableItemsIndex=[]; 可移动项索引推送(原始数组索引('c

我有一个包含7项的数组。我想将一些项以与原始数组中相同的顺序移动到不同的索引中。到目前为止,我已经将代码片段粘贴到了我尝试的任何东西上

let originalArray=['a','b','c','d','e','f','g'];
让itemsToBeMoved=['c','f','e'];
设newIndexToBeMoved=4;
//预期结果为['a'、'b'、'd'、'c'、'e'、'f'、'g'];
设movableItemsIndex=[];
可移动项索引推送(原始数组索引('c'));
可移动项索引推送(原始数组索引('f'));
可移动项索引推送(原始数组索引('e'));
//要移动的项目必须按照原始数组进行排序
movableItemsIndex.sort();
设itemsToBeMovedSorted=[originalArray[movableItemsIndex[0]],originalArray[movableItemsIndex[1]],originalArray[movableItemsIndex[2]];
//在将项目插入到新位置之前删除项目
while(可移动项索引长度){
原始阵列拼接(movableItemsIndex.pop(),1);
}
让NewUpdateArray=[…originalArray],j=0;
for(设i=newIndexToBeMoved;i请尝试以下操作:

const originalArray=['a','b','c','d','e','f','g'];
const itemsToBeMoved=['c','f','e'];
const newIndexToBeMoved=4;
原始阵列拼接(newIndexToBeMoved、0、itemsToBeMoved)

console.log(originalArray.flat())
假设所有元素都是唯一的:

let originalArray=['a','b','c','d','e','f','g'];
让itemsToBeMoved=['c','f','e'];
设newIndexToBeMoved=4;
//查找标记插入点的元素的值
let insertBefore=originalArray[newIndexToBeMoved];
//按照原始顺序,检查拆卸过程中是否存在
//列表、*和*将它们从原始阵列中删除
让我们移动=[];
for(设i=0;i=0){
移动。推(值);
原始拼接(i,1);
}否则{
++一,;
}
}
//查找插入点的新索引
设insertionIndex=originalArray.indexOf(insertBefore);
如果(插入索引<0){
insertionIndex=原始阵列长度;
}
//并将元素添加回
原始阵列拼接(插入索引,0,…移动);

控制台日志(原始阵列)这可以通过多种方式解决,但下面是一个可以完成的快速概述:

  • 首先,您可以为要移动的项目创建一个“当前”映射(基于源数组中的位置)
  • 现在,过滤数组,删除项目,但跟踪它们是否存在
  • 在所需位置(基于源数组中的索引)将(已排序的)已筛选出的值拼接到已更改的数组中
  • const move=(arr、项目、索引)=>{
    当前常量=新映射(items.Map(item=>[item,arr.indexOf(item)]);
    const changed=arr.filter(item=>!present.has(item));
    修改的.splice(arr.indexOf(arr[index-1]),0,…([…present.entries()]
    .filter(([k,v])=>v!=-1)
    .sort(([,k1],,k2])=>k1-k2)
    .map(([k,v])=>k));
    更改退货;
    }
    常量移动=移动(['a'、'b'、'c'、'd'、'e'、'f'、'g']、['c'、'f'、'e'],4);
    控制台日志(已移动)
    
    .as console wrapper{top:0;max height:100%!important;}
    将它们拼接出来,
    将它们重新拼接回来-如果要删除该索引之前的某些元素(从而更改其索引),那么是什么定义了插入索引?在搜索内容的上下文中,给出元素的值是否更有意义,在该值之后将重新插入移动的元素?问题是,因为我必须拼接必须移动的项目。原始数组中项的索引将更改。现在,我必须依次插入项目的索引在拼接后无效。您可以在我提供的代码段中看到预期结果。要移动的元素不是连续组。它们需要单独删除,但可以整体重新插入。这不会产生OP所需的输出序列。@Alnitak I必须对值进行排序并从索引中减去一,因为它们的索引似乎从1开始,而不是从0开始。感谢您的反馈。我相信索引从0开始,但它反映了原始序列中的插入点,因此最终插入点将取决于从前面的元素中删除的元素的数量。顺便说一句,您的排序依据是什么?价值观,还是它们的位置?没有评论很难判断,但如果你是按值排序,OP没有这样的要求。要求删除的元素以与原始数组相同的顺序出现,而原始数组恰好被排序。@Alnitak这是因为我使用了一个映射,但我没有保留原始索引序列,所以我认为您的响应会处理好这一点。。。我将当前地图设置为存储原始位置。这样我就可以过滤掉不存在的项目,然后再重新排序。对不起,在接受之前,我无法测试所有场景。对此我很抱歉。如果我更改itemsToBeMoved=['f','e']&newIndexToBeMoved=6;然后输出是[“e”、“f”、“a”、“b”、“c”、“d”、“g”],应该是[“a”、“b”、“c”、“d”、“g”、“e”、“f”]@SsNewbie那么您就有一个(缺乏)规范问题,因为在第一个示例中,您希望插入元素之后的
    d
    是索引为3(零索引)的元素,而不是第四个,也就是说,您正在元素3和4之间插入
    g
    是第六个元素。如果指定
    newIndexToBeMoved=7
    (即
    g
    位置后的一个),则“我的代码”将生成所需的输出。注意:代码已更新,以允许数组两端的边缘条件。@Alnatik:yes。。因此,如果(
    newIndexToBeMoved=6
    )(最后一个索引),则必须将其设置为