当前位置: 首页 > 面试题库 >

JavaScript如何改组数组?

宇文峰
2023-03-14
问题内容

我想改写JavaScript中的元素数组,如下所示:

[0, 3, 3] -> [3, 0, 3]
[9, 3, 6, 0, 6] -> [0, 3, 6, 9, 6]
[3, 3, 6, 0, 6] -> [0, 3, 6, 3, 6]

问题答案:

使用现代版本的Fisher-Yates随机播放算法:

/**
 * Shuffles array in place.
 * @param {Array} a items An array containing the items.
 */
function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = a[i];
        a[i] = a[j];
        a[j] = x;
    }
    return a;
}

ES2015(ES6)版本

/**
 * Shuffles array in place. ES6 version
 * @param {Array} a items An array containing the items.
 */
function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

但是请注意,,将变量与解构分配交换会导致严重的性能损失。

使用

var myArray = ['1','2','3','4','5','6','7','8','9'];
shuffle(myArray);


 类似资料:
  • 问题内容: 我正在使用Sencha Touch(ExtJS)从服务器获取JSON消息。我收到的消息是这个: 我的问题是我无法解析此JSON对象,因此我可以使用每个计数器对象。 我正在尝试像这样完成: 我究竟做错了什么 ?谢谢! 问题答案: Javascript具有针对字符串的内置JSON解析,我想这就是您拥有的: 在您的示例中使用此代码将是: 编辑 :for循环的使用中有一个错误(我在初读时就错过

  • 我需要将数组中的值替换为。尝试此操作时,仅显示阵列中的第一条记录。 如何显示数组中的所有条目?

  • 问题内容: 我有以下内容: 如何将类型为sun.org.mozilla.javascript.internal.NativeArray的结果对象转换为相应的Java数组?Somone可以向我显示一个 工作代码示例 吗?它应该适用于String和Integer数组。另外,很高兴知道在哪里寻找在rhino引擎和java之间的其他数据类型转换。 顺便说一句,我知道此页面,但我真的在寻找一个有效的代码示例

  • 问题内容: 您好,我想基于数组中的唯一项合并数组。 我拥有的对象 在这个totalCells数组中,我有几个这样的对象 现在,我想制作一个数组,在该数组中我可以基于lineNumber进行数组组合。 就像我有一个具有lineNumber属性和cellWidth集合的对象。我可以这样做吗? 我可以遍历每一行并检查行号是否相同,然后按该单元格宽度。有什么办法我可以算吗? 我正在尝试获得这样的输出。 问

  • 问题内容: 这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 有没有一种方法可以清空数组? 例如, 我该如何清空? 问题答案: 清除现有数组的方法: 方法1 (这是我对问题的原始回答) 此代码会将变量设置为新的空数组。如果您在其他任何地方都没有 引用原始数组,则这是完美的选择,因为这实际上会创建一个全新的(空)数组。您应该谨慎使用此方法,因为如果您从另一个变量或属

  • 问题内容: 我想比较两个数组…理想地,有效地比较。没有什么幻想,只要它们是相同的,如果不相同。毫不奇怪,比较运算符似乎不起作用。 每个数组都可以使用JSON编码,但是有没有一种更快或更“更好”的方法来简单地比较数组而不必遍历每个值? 问题答案: 要比较数组,请遍历它们并比较每个值: 比较数组: 用法: 您可能会说“ 但是比较字符串要快得多-没有循环… ”,那么,您应该注意存在ARE循环。第一个递归