繁体   English   中英

创建零填充 JavaScript 数组的最有效方法?

[英]Most efficient way to create a zero filled JavaScript array?

在 JavaScript 中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

在JavaScript中创建任意长度的零填充数组的最有效方法是什么?

lodash

_.fill(array, value)

是一种干净且跨浏览器的安全方式来填充数组。

我只是用:

var arr = [10];
for (var i=0; i<=arr.length;arr[i] = i, i++);

在这里找到另一个不错的选择http://www.2ality.com/2013/11/initializing-arrays.html

function fillArrayWithNumbers(n) {
  var arr = Array.apply(null, Array(n));
  return arr.map(function (x, i) { return i });
}

其他人似乎都缺少的是预先设置数组的长度 ,以便解释器不会不断地改变数组的大小。

我的简单Array.prototype.slice.apply(new Uint8Array(length))Array.prototype.slice.apply(new Uint8Array(length))

但是如果我要创建一个函数来快速完成它而没有一些hacky解决方法,我可能会编写一个这样的函数:

var filledArray = function(value, l) {
    var i = 0, a = []; a.length = l;
    while(i<l) a[i++] = value;
    return a;
    }

递归解决方案

正如其他几个人所指出的,使用.concat()通常可以提供快速的解决方案。 这是一个简单的递归解决方案:

 function zeroFill(len, a){ return len <= (a || (a = [0])).length ? a.slice(0, len) : zeroFill(len, a.concat(a)) } console.log(zeroFill(5));

还有一个通用的递归数组填充函数:

 function fill(len, v){ return len <= (v = [].concat(v, v)).length ? v.slice(0, len) : fill(len, v) } console.log(fill(5, 'abc'));

这里最快的是

(arr = []).length = len; arr.fill(0);
const item = 0
const arr = Array.from({length: 10}, () => item)

 const item = 0 const arr = Array.from({length: 42}, () => item) console.log('arr', arr)

您可以检查索引是否存在,以便对其附加 +1。

这样你就不需要一个零填充的数组。

例子:

var current_year = new Date().getFullYear();
var ages_array = new Array();

for (var i in data) {
    if(data[i]['BirthDate'] != null && data[i]['BirthDate'] != '0000-00-00'){

        var birth = new Date(data[i]['BirthDate']);
        var birth_year = birth.getFullYear();
        var age = current_year - birth_year;

        if(ages_array[age] == null){
            ages_array[age] = 1;
        }else{
            ages_array[age] += 1;
        }

    }
}

console.log(ages_array);
let arr = [...Array(100).fill(0)]

在我迄今为止的测试中,这是我电脑中最快的

1亿个元素大约需要350毫秒。

"0".repeat(100000000).split('');

对于相同数量的元素map(()=>0)大约需要 7000 毫秒,这是一个巨大的差异

您可以使用

new Array(10).fill(0)

最快的方法是使用 forEach =)

(我们为 IE < 9 保持向后兼容性)

var fillArray = Array.prototype.forEach
    ? function(arr, n) {
         arr.forEach(function(_, index) { arr[index] = n; });
         return arr;
      }
    : function(arr, n) {
         var len = arr.length;
         arr.length = 0;
         while(len--) arr.push(n);
         return arr;
      };

// test
fillArray([1,2,3], 'X'); // => ['X', 'X', 'X']
var str = "0000000...0000";
var arr = str.split("");

表达式中的用法: arr[i]*1;

编辑:如果arr应该用于整数表达式,那么请不要介意 '0' 的 char 值。 您只需按如下方式使用它: a = a * arr[i] (假设a具有整数值)。

我知道这不是问题的目的,但这是一个开箱即用的想法。 为什么? 我的 CSci 教授指出,用零“清理”数据并没有什么神奇之处。 所以最有效的方法是根本不这样做! 仅当数据需要为零作为初始条件(对于某些总和)时才这样做 - 大多数应用程序通常不是这种情况。

return Array( quantity ).fill(1).map( n => return n * Math.abs(~~(Math.random() * (1000 - 1 + 1)) + 1) );

一条线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM