当前位置: 首页 > 知识库问答 >
问题:

javascript - js 调换数组顺序?点击哪一个对象就往上移动一个顺序?

盛跃
2024-01-05

js 调换数组顺序?

let arr = [ {name: '测试1', value: '100'}, // 假如这是按钮(能获取到下标0) {name: '测试2', value: '200'}, // 假如这是按钮(能获取到下标1) {name: '测试3', value: '300'}, // 假如这是按钮(能获取到下标2) {name: '测试4', value: '400'}, // 假如这是按钮(能获取到下标3)]

这个是后端返回的数组 循环遍历渲染在页面上,每条数据后面有一个按钮
点击下标为3的按钮,需要下标为3的这条数据到第一条
点击下标为2的按钮,需要下标为2的这条数据到第二条
点击那个数据后需要向上移动一下

麻烦大佬们帮我看看,这个数组的长度不是固定的4个

共有5个答案

卢健
2024-01-05

把点击的那个数组通过下标移除 再插入到下标-1的位置 处理好边界情况即可

胡景澄
2024-01-05

const up = (list, index) => (list.splice((index || list.length)-1, 0, list.splice(index, 1)[0]), list)
没有判断index超出数组长度以及负数情况,需要的话自行添加相应处理逻辑,
ps:(x,y)表达式是为了返回y,即返回list,因为splice直接修改原数组,不需要返回值也可以const up = (list, index) => list.splice((index || list.length)-1, 0, list.splice(index, 1)[0])

郑宇
2024-01-05
let arr = [ {name: '测试1', value: '100'}, // 假如这是按钮(能获取到下标0) {name: '测试2', value: '200'}, // 假如这是按钮(能获取到下标1) {name: '测试3', value: '300'}, // 假如这是按钮(能获取到下标2) {name: '测试4', value: '400'}, // 假如这是按钮(能获取到下标3)]//上移一行function upRow(index) {  if(index){      let cur = arr[index];      let tmp = arr[index-1];      arr[index] = tmp;      arr[index-1] = cur;// 简写就是楼上所说的//[arr[index], arr[index-1]] = [arr[index-1], arr[index]]  }}upRow(1);
廖琪
2024-01-05
onclick=func1(){    [list[3], list[0]] = [list[0], list[3]]}onclick=func1(){    [list[2], list[1]] = [list[1], list[2]]}
谷翰飞
2024-01-05

描述再清晰一点,为什么点击下标3,数据到第一,而下标2是第二呢,是每个按钮只能点击一次吗,然后按照点击按钮的顺序把渲染的数据对应排序?

 类似资料:
  • 问题内容: 假设我有一个像这样的数组 但我想将其转换为这样的对象: 能做到吗?我尝试过的所有方法都只会获得最后一个键值对。 问题答案: 如果您使用的是ES6或更高版本:

  • 将oneArr 按照 twoArr 的顺序进行排序,而且两个数组可能一样长,也可能不一样长, twoArr 是基于oneArr选中的数据,oneArr 是接口返回的数据,

  • 在 Java 中,如何根据另一个排序数组的索引顺序对数组进行排序?例如,如果我有: 我按升序对 arr2 进行排序 我希望另一个是: 我怎么能做到这是Java?我知道我会保存新的排序数组到新的实例。任何帮助,谢谢!

  • 问题内容: 我有多个数组,我想根据其中一个的排序顺序对所有数组进行排序,如下所示: 我希望函数执行后,数组将如下所示: 问题答案: 您可以执行以下操作:首先根据键控数组的索引的索引对它们进行索引的值对它们进行排序,然后使用: 如果要在任何类型的集合上使它通用(但仍以与std lib集合算法相同的样式返回数组): 以及带有自定义比较器的版本:

  • 我有多个数组,我想根据其中一个数组的排序顺序对所有数组进行排序,如下所示: 我预计函数执行后的数组将如下所示:

  • 考虑以下以串行/顺序方式读取文件数组的代码。返回一个promise,该promise仅在按顺序读取所有文件后才解析。 上面的代码可以工作,但我不喜欢必须为事情按顺序发生而做递归。有没有更简单的方法可以重写这段代码,使我不必使用我怪异的函数? 最初,我尝试使用,但这导致所有调用并发发生,这不是我想要的: