css 如何重新排列此菜单项的位置

iovurdzv  于 2023-03-20  发布在  其他
关注(0)|答案(3)|浏览(183)

我有数组,我想重新排列数组一些元素,就像我想第2个元素应该在第0个位置,第3个元素应该在第2个位置。请看屏幕截图,以供参考,最终结果应该是这样的-〉快速入门|行会|参考文件|救命
如果我向数组中添加任何新项,那么它应该出现在最后一个位置

<Nav className="me-auto">
          {newNavArr.map((button, index) => (
            <NavLink
              key={index}
              to={button.slug}
              position="relative"
              padding="20px"
            >
              {button.title}
            </NavLink>
          ))}
        </Nav>
cu6pst1q

cu6pst1q1#

我认为你可以做到这一点,首先你需要创建一个排序数组的列表,如果你的数据是动态的,那么你可以根据你的数组在一个新的数组中排序数据,正如你可以看到下面的代码,我希望这会有帮助。

const arr = ["Guilds", "Reference Docs", "Help", "Quicky Starts"]

const sortedArr = ["Quicky Starts", "Guilds", "Ahmad", "Reference Docs", "Help"]

let newArr = []

arr.forEach(element => {
  if (sortedArr.includes(element)) {
    const findIndex = sortedArr.findIndex(i => i === element);
    newArr[findIndex] = element;
  }
})

let result = newArr.filter(d => d !== undefined)
console.log(result)
r9f1avp5

r9f1avp52#

用CSS应用flexbox(display: flex)+ order规则来进行这种位置排序要好得多。值得注意的是,建议的其他解决方案依赖于不同的Map方法(如spliceincludesforEach),这些方法创建数组的新示例(稍后由垃圾收集器清理,但根本不是最优的)

<Nav className="me-auto">
  {newNavArr.map((button, index) => (
    <NavLink
      key={index}
      to={button.slug}
      position="relative"
      padding="20px"
    >
      {button.title}
    </NavLink>
  ))}
</Nav>

以及CSS:

.me-auto{
  display: flex;
}

.me-auto:nth-child(3){
   order: 2;
}

.me-auto:nth-child(2){
   order: 3;
}

您可以根据需要向其余元素添加自定义顺序

dgiusagp

dgiusagp3#

这是一个改变数组任意位置的算法,写上你想改变的元素名,然后写上你想交换的第二个元素名。代码:

function change(arr, from, to){

arr.splice(arr.indexOf(to), 0, arr.splice(arr.indexOf(from),1)[0])
}
let arr = ["Quicky Starts","Guilds","Reference Docs","Help"];
console.log(arr) // return ["Quicky Starts", "Guilds", "Reference Docs", "Help"]

change(arr, "Guilds", "Quicky Starts");

console.log(arr) // return  ["Guilds", "Quicky Starts", "Reference Docs", "Help"]

如果你想改变第二个元素应该是第一个位置这样做。

change(arr, "Reference Docs", "Quicky Starts");
console.log(arr) // return ["Guilds", "Reference Docs", "Quicky Starts", "Help"]

相关问题