- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var array = [3,9,23,76,1,54,21,12,0,9,2];
var shuffled = array.sort(function() {return 0.5 - Math.random()});
console.log(shuffled);
我知道结果,也对此感到满意。
上面的代码返回数组元素的打乱顺序。
我很困惑为什么会产生这样的输出。
.sort
内部的函数有何意义以及它对输出有何贡献?
最佳答案
该函数实际上接受两个参数,即数组中的 2 个项目。目的是比较这些元素并返回一个数字。
如果数字为正数,则第二项应位于第一项之前。
如果数字为 0 或负数,则第二项应位于第一项之后。
[0,1].sort(function(a,b){return 1;}); // [1, 0], reverses order
[0,1].sort(function(a,b){return 0;}); // [0, 1], does nothing
[0,1].sort(function(a,b){return -1;}); // [0, 1], does nothing
在上述示例的每种情况下,a === 0
和 b === 1
。
要逐步了解对 [1,3,2,4,4,0]
进行升序排序时发生的情况,可以编写一个函数来准确记录每次发生的情况步骤
arr = [1,3,2,4,4,0];
arr.sort(function(a,b){ // ascending order sort
var result = a-b,
str = '';
if(result > 0) str = 'so swapping';
else if(result === 0) str = 'so ignoring'
else str = 'so continuing';
console.log('with [ '+arr.join(', ')+' ]','comparing',a,'to',b,'resulting in',result, str);
return result;
});
console.log('resulting in [ '+arr.join(', ')+' ]');
输出
with [ 1, 3, 2, 4, 4, 0 ] comparing 1 to 3 resulting in -2 so continuing
with [ 1, 3, 2, 4, 4, 0 ] comparing 3 to 2 resulting in 1 so swapping
with [ 1, 3, 3, 4, 4, 0 ] comparing 1 to 2 resulting in -1 so continuing
with [ 1, 2, 3, 4, 4, 0 ] comparing 3 to 4 resulting in -1 so continuing
with [ 1, 2, 3, 4, 4, 0 ] comparing 4 to 4 resulting in 0 so ignoring
with [ 1, 2, 3, 4, 4, 0 ] comparing 4 to 0 resulting in 4 so swapping
with [ 1, 2, 3, 4, 4, 4 ] comparing 4 to 0 resulting in 4 so swapping
with [ 1, 2, 3, 4, 4, 4 ] comparing 3 to 0 resulting in 3 so swapping
with [ 1, 2, 3, 3, 4, 4 ] comparing 2 to 0 resulting in 2 so swapping
with [ 1, 2, 2, 3, 4, 4 ] comparing 1 to 0 resulting in 1 so swapping
resulting in [ 0, 1, 2, 3, 4, 4 ]
<小时/>
为了完整性,原始问题中洗牌算法的概率表(估计,基于每个索引 500,000 次试验),X 是起始索引
x 0 1 2 3 4 5 6 7 8 9 10
0 | 8.0, 8.0, 6.2, 6.6, 9.2, 10.8, 9.3, 6.6, 6.2, 9.7, 18.8
1 | 4.5, 4.6, 7.8, 12.2, 16.9, 12.9, 11.4, 10.7, 8.7, 6.1, 3.6
2 | 15.5, 15.5, 10.3, 5.9, 3.7, 3.8, 5.7, 8.3, 10.6, 11.7, 8.5
3 | 10.4, 10.3, 13.4, 10.2, 7.0, 6.5, 7.8, 9.4, 9.7, 8.8, 6.0
4 | 6.4, 6.3, 10.7, 15.4, 11.4, 9.5, 9.6, 9.9, 8.9, 6.9, 4.4
5 | 16.1, 16.1, 10.9, 7.7, 7.4, 7.6, 6.2, 4.4, 4.1, 6.5, 12.5
6 | 4.7, 4.7, 7.1, 9.7, 12.6, 16.3, 13.6, 11.9, 9.2, 6.1, 3.6
7 | 6.0, 6.0, 7.7, 8.9, 9.4, 10.9, 14.0, 13.6, 11.2, 7.4, 4.3
8 | 8.4, 8.3, 9.1, 8.6, 7.3, 6.7, 8.2, 11.6, 13.8, 10.8, 6.7
9 | 11.5, 11.4, 10.1, 7.6, 5.0, 3.7, 4.2, 6.7, 10.9, 15.8, 12.6
10 | 8.0, 8.1, 6.2, 6.6, 9.2, 10.9, 9.2, 6.6, 6.1, 9.8, 18.8
关于javascript - SomeArray.sort ( function() { ... } ) 语句背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449479/
sorted_copy 函数的以下两个实现之间是否存在实质性差异(注意:只有最后一行不同): /* version 1 */ function sorted_copy ( array ) {
所以我了解到 Ember 可以对数组和其中的元素进行计算。这里有两个选项。 someArray.[] 和someArray.@each 如果说我更改了数组中的一个元素,并且有一个计算属性依赖于它。我应
我一直在尝试使用 JSON 数据处理一些项目,但我遇到了一个问题,当我声明我的数组 someArray: [Int]? 时,打印的数据都是 nils。然而,当我更改为 someArray:[Int]
#include int main() { int a[]={11,12,13},*p; printf("%x\n",a); for(int i=0;i<3;i++)
我有一个简单的 C 问题。这句话是什么意思? if (!someArray[i]) 我知道运营商!表示不。但我无法理解它。谢谢!! 最佳答案 if (!someArray[i]) 表示如果 some
.contains 是否可以有多个参数?我正在搜索数组以确保每个字符串包含多个字符之一。我在网上搜寻过,但没有发现任何有用的东西。 for(String s : fileContent
我尝试用谷歌搜索这个,但谷歌不能很好地处理“--n”。我在教授的代码中看到了这一点: f[--n]; f[n++]; 其中 f 是 double 值数组。 我的猜测是它在减少(或增加)到 n 之前返回
我是 reading about Deferreds and Promises并不断遇到 $.when.apply($, someArray)。我有点不清楚这到底是做什么的,正在寻找 one line
var array = [3,9,23,76,1,54,21,12,0,9,2]; var shuffled = array.sort(function() {return 0.5 - Math.ra
现在尝试创建一些代码,从 CSV 文件中获取一个字符串并将其与某些条件进行比较。如果此字符串通过条件,则将其分为 4 部分 - 将每部分放入数组中,然后从 TextBox 中获取一些新值并进行更改。
现在尝试创建一些代码,从 CSV 文件中获取一个字符串并将其与一些标准进行比较。如果此字符串通过标准,则将其分成 4 部分 - 将每个部分放入数组中,然后从 TextBox 中获取一些新值并进行更改。
有谁知道为什么在带有针对 ES6 的 compilerOptions 的 TypeScript 中,我使用以下语法来迭代数组?它适用于 Edge 和 Chrome,但不适用于 IE11。它提示了一个;
我只是在用 AngularJS 做一些事情。我注意到通过使用 if 条件的附加样式,我总是得到错误的结果。为什么这样?我错过了什么吗?我试图用谷歌搜索它,但没有找到任何东西。 var myApp =
这个有效: pressure := &dataDump[845] CurrentPressure := *pressure 但是有没有办法改变第一行,使 pressure 成为 dataDump[84
我无法将 3 个数组发送到 SQL 语句中,它会引发异常 select t.ttt, t.created_date, concat_ws('-',lp.mmm, lp.ccc, lp.eee ) fr
我认为新符号是这样工作的: someArray[5] 变成 someArray[5] 实际上会变成 [someArray objectAtIndexedSubscript:5] 但是,在 NSArra
相关 fiddle :https://jsfiddle.net/tqf4zea7/1/ 我在 Angular Controller 中使用 $q。为了测试某些场景,我在作用域上创建了一个数组以将消息推
我是一名优秀的程序员,十分优秀!