我很难弄清楚如何移动数组元素。 例如,给出以下内容:

var arr = [ 'a', 'b', 'c', 'd', 'e'];

我为什么能写入移动功能'd'之前, 'b' ?

或'a'后'c' ?

移动之后,应更新其余元素的索引。 这意味着在第一个示例中,移动后arr [0] ='a',arr [1] ='d'arr [2] ='b',arr [3] ='c',arr [4] = 'e'

这看起来应该很简单,但是我无法将其包裹住。

#1楼

您可以实现一些基本的微积分,并创建通用函数以将数组元素从一个位置移动到另一位置。

对于JavaScript,它看起来像这样:

function magicFunction (targetArray, indexFrom, indexTo) {

targetElement = targetArray[indexFrom];

magicIncrement = (indexTo - indexFrom) / Math.abs (indexTo - indexFrom);

for (Element = indexFrom; Element != indexTo; Element += magicIncrement){

targetArray[Element] = targetArray[Element + magicIncrement];

}

targetArray[indexTo] = targetElement;

}

请查看“积木”中的“移动数组元素”以获取详细说明。

#2楼

Array.move.js

摘要

在数组中移动元素,返回包含已移动元素的数组。

句法

array.move(index, howMany, toIndex);

参量

index :元素移动的索引。 如果为负, 索引将从末尾开始。

howMany :要从索引移动的元素数。

toIndex :放置移动元素的数组的索引。 如果为负,则toIndex将从结尾开始。

用法

array = ["a", "b", "c", "d", "e", "f", "g"];

array.move(3, 2, 1); // returns ["d","e"]

array; // returns ["a", "d", "e", "b", "c", "f", "g"]

Polyfill

Array.prototype.move || Object.defineProperty(Array.prototype, "move", {

value: function (index, howMany, toIndex) {

var

array = this,

index = parseInt(index) || 0,

index = index < 0 ? array.length + index : index,

toIndex = parseInt(toIndex) || 0,

toIndex = toIndex < 0 ? array.length + toIndex : toIndex,

toIndex = toIndex <= index ? toIndex : toIndex <= index + howMany ? index : toIndex - howMany,

moved;

array.splice.apply(array, [toIndex, 0].concat(moved = array.splice(index, howMany)));

return moved;

}

});

#3楼

最后,我将这两种方法结合起来,无论在长距离还是短距离移动时,效果都更好。 我得到了相当一致的结果,但是这可能会被比我聪明的人进行一些调整,以针对不同的尺寸进行不同的工作,等等。

当移动物体较小距离时,使用其他一些方法比使用拼接要快得多(x10)。 但是,这可能会根据数组的长度而变化,但是对于大型数组而言确实如此。

function ArrayMove(array, from, to) {

if ( Math.abs(from - to) > 60) {

array.splice(to, 0, array.splice(from, 1)[0]);

} else {

// works better when we are not moving things very far

var target = array[from];

var inc = (to - from) / Math.abs(to - from);

var current = from;

for (; current != to; current += inc) {

array[current] = array[current + inc];

}

array[to] = target;

}

}

#4楼

splice()方法在数组中添加/删除项目,并返回删除的项目。

注意:此方法更改原始数组。 / w3schools /

Array.prototype.move = function(from,to){

this.splice(to,0,this.splice(from,1)[0]);

return this;

};

var arr = [ 'a', 'b', 'c', 'd', 'e'];

arr.move(3,1);//["a", "d", "b", "c", "e"]

var arr = [ 'a', 'b', 'c', 'd', 'e'];

arr.move(0,2);//["b", "c", "a", "d", "e"]

由于该函数是可链接的,因此也可以工作:

alert(arr.move(0,2).join(','));

#5楼

我的2c。 易于阅读,有效,快速,不会创建新数组。

function move(array, from, to) {

if( to === from ) return array;

var target = array[from];

var increment = to < from ? -1 : 1;

for(var k = from; k != to; k += increment){

array[k] = array[k + increment];

}

array[to] = target;

return array;

}

java 数组 移动位置_将数组元素从一个数组位置移动到另一数组位置相关推荐

  1. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

  2. 若在矩阵A中存在一个元素Aij,该元素是第i行元素中最大值并且又是第j列元素中最小值,则称此元素值为该元素的一个鞍点。假设以二维数组存储矩阵A,求该矩阵中的所有鞍点。

    #include <stdio.h> #include <stdlib.h> int main() {     int nh,nl,max,p,top=0;//max存储该行的 ...

  3. java子字符串查找位置_初学者求教,如何在字符串中查找多个子字符串的位置...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 鲁镇的网吧的格局,是和别处不同的:都是门口一个曲尺形的大柜台,柜里面预备着热水,可以随时泡奶茶.上学的人,中午傍晚放了学,每每花三元钱,上两个小时,--这 ...

  4. java源代码众筹网站_【JavaWeb项目】一个众筹网站的开发(三)第一个网页

    一.bootstrap 本项目采用bootstrap3 使用bootstrap三步: 1.导入jQuery 2.导入bootstrap自己的css样式 3.导入bootstrap自己的js文件 boo ...

  5. oracle 截取字符串中指定位置_手撕虚拟内存(1)——字符串在虚拟内存中的段位置与/proc虚拟文件系统...

    原文:Hack The Virtual Memory: C strings & /proc - Holberton 翻译:RobotCode俱乐部 介绍 这是一系列关于虚拟内存的小文章/教程中 ...

  6. java最少有多少线程_【并发编程】一个最简单的Java程序有多少线程?

    一个最简单的Java程序有多少线程? 通过下面程序可以计算出当前程序的线程总数. import java.lang.management.ManagementFactory; import java. ...

  7. java 如何实现计数_如何高效的实现一个计数器map

    这本是多年前一个stackoverflow上的一个讨论,回答中涉及到了多种计数方法.对于一个key-value结构的map,我们在编程时会经常涉及到key是对象,而value是一个integer或lo ...

  8. java内存泄漏案例_寻找内存泄漏:一个案例研究

    java内存泄漏案例 一周前,我被要求修复一个有内存泄漏问题的webapp. 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏,我想这有多难. 但是事实证明这是一个挑战. 12小时后,我发现该应 ...

  9. bootstrap 导航菜单 折叠位置_教大家如何编写一个网页导航条

    导航条简单地说就是对你整个网站模块的简单介绍,你可以直接点击导航条某一个按钮或板块便可进入其相应的界面,如:网页.新闻.贴吧等 .在企业网站上,导航条上常见的有:产品介绍,公司简介,最新产品,联系我们 ...

  10. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器

    现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...

最新文章

  1. NSArray排序问题
  2. 鸿蒙2.0beta报名,鸿蒙OS 2.0 Beta版系统在哪报名-报名方法介绍
  3. [机器学习-回归算法]一元线性回归用最小二乘法的推导过程
  4. linux C++获取当前文件所在路径的方法
  5. IE6不支持hover赋予css样式的解决方法 如div:hover li:hover支持
  6. Java入门第37课——猜字母游戏之设计数据结构
  7. java sdk设计原则_java 设计模式遵循的六大原则
  8. 120 Python程序中的线程操作-队列
  9. Julia : Some, something, Nothing
  10. jmeter录制脚本(Mac)
  11. PHP/PHPStudy所需的VC9-VC14的运行库
  12. ZIP和RAR文件的不同
  13. mac 微信不能设置代理服务器,mac微信能用但是浏览器上不了网
  14. 2021年美容师(中级)考试技巧及美容师(中级)试题及解析
  15. nginx出现499现象及原因
  16. 一文读懂中国的影子银行
  17. Docker离线安装及python算法部署详细介绍
  18. Android Studio连接使用第三方模拟器
  19. java树状结构递归与非递归实现,外加sql递归实现
  20. 新型网络病毒“风暴”防护解决方案

热门文章

  1. 快捷导航shortcut部分做法二(85)
  2. java如何关闭一个浏览器网页代码_使用java代码打开关闭浏览器(指定的浏览器或者计算机默认的浏览器)...
  3. 参数估计:点估计和区间估计
  4. 课程设计实训-3 英文词典
  5. 知识的诅咒:为什么你觉得显而易见,而对方却无法理解
  6. linux ajp集群,Apache应用集群——AJP方式
  7. 鬼画符门之点点大阵(python)
  8. 前端自适应布局-带文字图片的自适应
  9. 概率统计Python计算:单个正态总体均值单侧假设的Z检验
  10. 【STM32】谈谈STM32F10XX的定时器通道复用功能重映射