当前位置:首页 > JavaScript

js实现重排

2026-03-15 09:24:59JavaScript

实现数组重排

使用Fisher-Yates洗牌算法对数组进行随机重排。该算法通过遍历数组并随机交换元素实现高效且均匀的随机排列。

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

DOM元素重排

对DOM子元素进行随机排序可以通过以下方式实现。先转换为数组操作后再重新插入DOM。

function shuffleDOM(parent) {
  const children = Array.from(parent.children);
  shuffleArray(children);
  children.forEach(child => parent.appendChild(child));
}

保留原数组的重排

创建数组副本进行重排,避免修改原数组。适用于需要保留原始数据的情况。

function shuffleCopy(array) {
  const newArray = [...array];
  return shuffleArray(newArray);
}

加权随机重排

当需要根据权重进行非均匀重排时,可以使用以下方法。权重越高出现概率越大。

function weightedShuffle(items, weights) {
  const totalWeight = weights.reduce((a, b) => a + b, 0);
  return items.map((_, i) => {
    const rand = Math.random() * totalWeight;
    let weightSum = 0;
    for (let j = 0; j < items.length; j++) {
      weightSum += weights[j];
      if (rand <= weightSum) return items[j];
    }
  });
}

稳定重排

保持部分元素相对顺序的重排实现。通过分组先打乱组间顺序再打乱组内顺序。

js实现重排

function stableShuffle(array, groupSize) {
  const groups = [];
  for (let i = 0; i < array.length; i += groupSize) {
    groups.push(array.slice(i, i + groupSize));
  }
  shuffleArray(groups);
  return groups.flatMap(group => {
    shuffleArray(group);
    return group;
  });
}

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…