相关疑难解决方法(0)

在JavaScript中多次重复多个元素的数组

在JavaScript中,如何以简洁的方式重复包含多个元素的数组?

在Ruby中,你可以做到

irb(main):001:0> ["a", "b", "c"] * 3
=> ["a", "b", "c", "a", "b", "c", "a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

我查了一下lodash库,没找到任何直接适用的东西.功能请求:重复数组.是一个将其添加到lodash的功能请求,以及给出的最佳解决方法

const arrayToRepeat = [1, 2, 3];
const numberOfRepeats = 3;
const repeatedArray = _.flatten(_.times(numberOfRepeats, _.constant(arrayToRepeat)));
Run Code Online (Sandbox Code Playgroud)

问题创建零填充JavaScript数组的最有效方法?创建一个具有相同元素重复多次的数组,专注于多次重复单个元素,而我想重复一个具有多个元素的数组.

使用维护良好的库是可以接受的.

javascript arrays repeat

20
推荐指数
4
解决办法
3936
查看次数

让NaN不一致地映射parseInt

正在玩一些代码来创建一个数组,0并发现只NaN返回一个值而不是0.我在Chrome,Node和Firefox中得到了它.

导致第二个价值的原因是NaN什么?

var arr = new Array(32).join(0).split('').map(parseInt)
// prints [0, NaN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
console.dir(arr)
Run Code Online (Sandbox Code Playgroud)

javascript arrays nan

19
推荐指数
3
解决办法
1426
查看次数

为什么Array.apply(null,[args])在处理稀疏数组时行为不一致?

我最近在SO上发现了以下代码片段,以帮助快速填充具有默认值的数组:

Array.apply(null, new Array(3)).map(function() {return 0;});
Run Code Online (Sandbox Code Playgroud)

鉴于Array构造函数和apply方法的行为,上面的代码片段也可以这样重写:

Array.apply(null, [undefined, undefined, undefined]).map(function() {return 0;});
Run Code Online (Sandbox Code Playgroud)

在处理您希望使用默认值填充的稀疏数组时,此技术也很有用:

var sparseArr = [3,,,4,1,,],
    denseArr = Array.apply(null, sparseArr).map(function(e) {
      return e === undefined ? 0 : e;
    });

// denseArr = [3,0,0,4,1,0]
Run Code Online (Sandbox Code Playgroud)

然而,其中出现了两个奇怪之处:

  1. 如果sparseArr未定义最后一个术语,则不映射该术语denseArr
  2. 如果sparseArr仅包含单个术语(例如sparseArr = [1])或单个术语后跟单个尾随未定义术语(例如sparseArr = [1,]),则得到的denseArr等于[undefined x 1]

谁能解释这种行为?

javascript arrays

17
推荐指数
1
解决办法
6838
查看次数

在JavaScript中使用随机数创建长度为n的数组

按照这个答案创建一个指定长度的数组,我执行下面的操作得到一个相应的结果,但是用随机数填充,而不是零.

var randoms = Array(4).fill(Math.floor(Math.random() * 9));
Run Code Online (Sandbox Code Playgroud)

好吧,从数学上讲它是随机的,好的.但是我希望随机性在数组中可见,当然不仅仅是在运行之间.愚蠢的电脑......不要做我说的话.做我想要的!

我可以迭代并将其作为随机(和变化)值.但我想知道,纯粹的好奇心,如果有可能通过像MatLab这样的单线程获得正确的结果.我需要调用eval(function()...)吗?我听说过很多关于评估的坏事......

请注意,上面生成的代码如下:

[7,7,7,7]
[3,3,3,3]

等我想要的东西

[1,2,3,4]
[4,3,8,4]

javascript arrays random

16
推荐指数
4
解决办法
1万
查看次数

重置多维数组的最快方法?

假设我有一个二维数组:vectors[x][y],初始数组结构如下所示:

vectors = [    
 [0, 0, 0, 0, 0,],
 [0, 0, 0, 0, 0,],
 [0, 0, 0, 0, 0,],
 [0, 0, 0, 0, 0,],
 [0, 0, 0, 0, 0,]
]
Run Code Online (Sandbox Code Playgroud)

经过一些计算,数组中的数据是随机的.将数组返回到初始状态的最快方法和最有效的方法是什么?

我知道我可以硬编码上面的归零数组并再次设置等于它的向量,但我也知道一个算法如:

for (var x = 0; x < vectors.length; x++) {
    for (var y = 0; y < vectors[x].length; y++) {
        vectors[x][y] = 0;
    }

}
Run Code Online (Sandbox Code Playgroud)

是O(x*y).

那么哪种方式更好?是否有更好,更快/更有效的方法来解决这个问题?

对于将任意长度的多维数组归零的一般情况,这是最好的方法吗?(如果重要,我正在使用JavaScript)

javascript arrays algorithm performance multidimensional-array

9
推荐指数
1
解决办法
2631
查看次数

对象不支持属性或方法'填充'

我在网上找不到同样的问题.IE 11给出错误"对象不支持属性或方法fill".

var arr = new Array(5);
arr.fill(false);
Run Code Online (Sandbox Code Playgroud)

有没有方便的方法来填充数组而不是使用for循环?谢谢.

javascript

9
推荐指数
2
解决办法
1万
查看次数

Javascript在数组中添加N次相同的元素

假设我有这样的地图:

var map = {"a" : 100, "b" : 200, "c": 700};
Run Code Online (Sandbox Code Playgroud)

我想要一个包含"a"100次,"b"200次和"c"700次的数组:

map_array = [a, a, a, a, ... a, b, b, b, ... b, c, c, c, ... c]
Run Code Online (Sandbox Code Playgroud)

简单的解决方案是循环频率时间并推入数组:

var map_array = []
for(key in map)
{
    for(var i=1; i <= map[key] ; i++)
    {
       map_array.push(key)
    }
}
Run Code Online (Sandbox Code Playgroud)

但这显然需要时间来处理大数据的过程,我们是否可以努力使上述功能更有效?

javascript arrays performance

7
推荐指数
2
解决办法
4119
查看次数

随机数,Math.floor(...) vs Math.ceil(...)

我见过很多生成随机数的代码,例如

// random integers in the interval [1, 10]
Math.floor(Math.random()*10 + 1)
Run Code Online (Sandbox Code Playgroud)

无论如何,我觉得我错过了一些东西。为什么人们不使用更简洁的方式

Math.ceil(Math.random()*10);
Run Code Online (Sandbox Code Playgroud)

?

我试图测试随机性,到目前为止似乎是正确的。

其实后面的代码

// will generate random integers from 1 to 4
var frequencies = [ 0, 0, 0, 0, 0 ]; // not using the first place
var randomNumber;
for ( var i = 0; i < 1*1000*1000; ++i ) {
   randomNumber = Math.ceil(Math.random()*4);
   frequencies[randomNumber]++;
}

for ( var i = 1; i <= 4; ++i ) {
   console.log(i +": "+ frequencies[i]);
}
Run Code Online (Sandbox Code Playgroud)

打印出来

1: …
Run Code Online (Sandbox Code Playgroud)

javascript random

5
推荐指数
2
解决办法
1万
查看次数

在 React 中生成 N 个组件的最佳实践(无数据)

假设我有一个组件,例如:

<FormInput label="Phone Number" />
Run Code Online (Sandbox Code Playgroud)

我想在 UI 上绘制 N 个。实现这一目标的最佳实践是什么?我最初的想法是创建一个包含 N 个成员的数组,以便我可以使用 map,例如:

var myMapTrigger = [0,0,0,0,0]
myMapTrigger.map(function(){
  return (<FormInput label="Phone Number" />)
}
Run Code Online (Sandbox Code Playgroud)

这当然有点hacky。有没有更惯用的方式更“思考React”?

reactjs map-function

5
推荐指数
1
解决办法
2827
查看次数

V8如何优化超大型阵列的创建?

最近,我不得不优化与创建大型数组(〜10?元素)有关的任务。

我测试了几种不同的方法,并且据jsperf所述,以下选项似乎是最快的。

var max = 10000000;
var arr = new Array(max);
for (let i = 0; i < max; i++) {
  arr[i] = true;
}
Run Code Online (Sandbox Code Playgroud)

比〜快85%

var max = 10000000;
var arr = [];
for (let i = 0; i < max; i++) {
  arr.push(true);
}
Run Code Online (Sandbox Code Playgroud)

实际上,在我的实际应用中,第一个代码片段的运行速度也要快得多。

然而,我的理解是,V8引擎能够进行优化的操作对数组PACKED_SMI_ELEMENTS的元素种类,而不是数组HOLEY_ELEMENTS

所以我的问题是:

  • 如果是真的,则new Array(n)创建一个内部标记为的数组HOLEY_ELEMENTS(我相信是真的),并且
  • 如果是真的,则[]创建一个内部标记有数组的数组PACKED_SMI_ELEMENTS(我不太确定是真的)

为什么第一个摘要比第二个要快?

我经历过的相关问题:

javascript arrays performance v8

4
推荐指数
1
解决办法
134
查看次数