【问题标题】:Fastest way to aggregate two typed arrays in javascript [duplicate]在javascript中聚合两个类型数组的最快方法[重复]
【发布时间】:2015-07-06 00:59:51
【问题描述】:

大家好,我正在尝试找出将两个类型化数组聚合为一个数组的最快方法。

想象数据看起来像这样 [Int8Array, Int8Array]

我想最终得到一个

Int8Array

目前我正在尝试循环遍历父数组和子数组,因为类型化数组不支持 concat 方法我无法执行正常的 reduce 和 concat 方法。

  for (var i = 0, len = input.length; i < len; i++) {
     for (var n = 0, len = input[i].length; n < len; n++) {
       output.push(input[i][n]);
     }
  }

但我只是觉得必须有一种更有效的方法来做到这一点。

尝试使用 set 方法似乎更快但不适用于 2 以上。

http://jsperf.com/typed-array-aggregation

【问题讨论】:

  • 是两个数组(就像你写的那样)还是一个二维数组(就像你的代码一样)?
  • 看看这个 jsperf,尝试将超过 2 个 typedarrays 设置为单个数组失败。 jsperf.com/typed-array-aggregation

标签: javascript arrays aggregation typed-arrays


【解决方案1】:

请参考以下链接。 How can I merge TypedArrays in JavaScript?

他们使用不需要循环的set方法

【讨论】:

  • 在 chrome 和 safari 中使用 set 方法似乎是最快的,但在 Firefox 中使用 2 个循环比这快一点。 jsperf.com/typed-array-aggregation 我唯一担心的是 set 方法似乎很适合将 2 添加到单个数组中,但我尝试并未能创建一个循环,该循环将正确设置输出数组,输入数组包含超过 2 个子数组。 [Int8,Int8] 效果很好 [Int8,Int8,Int8,Int8] 不行
  • 即使使用多个阵列,它也能正常工作,它似乎是迄今为止最快的方法
【解决方案2】:

忽略类型数组

您可以像这样concatenate 数组:

var arr1 = ['1','2','3'];
var arr2 = ['a','b','c'];
var concatArr = arr1.concat(arr2);

//result: ['1','2','3','a','b','c']

来自 Mozilla 的网站:Array.prototype.concat

【讨论】:

  • 查看 TypedArrays 的documentation,API 不像普通数组那样提供concat 方法。如果 OP 使用标准数组并手动管理类型,那么concat 将是答案。很难说,因为 TypedArrays 也没有 push 方法,所以我不确定他使用的是哪个。
  • 糟糕,我的错。当然,你是对的。
【解决方案3】:

要完成此任务,您必须通过循环。但在这里您可以查看其他一些方法。

Merge keys array and values array into an object in Javascript

merge two arrays (keys and values) into an object [duplicate]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2014-11-17
    相关资源
    最近更新 更多