javascript - 如何展平夹紧的阵列

标签 javascript arrays multidimensional-array flatten

在那一刻,我发现自己被困在尝试展平 Uint8ClampedArray 中。

起始数组结构是 data = [227, 138, 255…] 并且在从类似的数组创建数组之后 enc = [Uint8ClampedArray[900], Uint8ClampedArray[900] , Uint8ClampedArray[900]...] 我尝试将其展平。

我为此尝试了很多方法/解决方案,但似乎没有一个有效:

MDN推荐的方法

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
}, []);

与连接

data = [].concat.apply([], enc);

并通过一个函数

function flatten(arr) {
  return arr.reduce(function (flat, toFlatten) {
    return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
  }, []);
}

但到目前为止没有任何乐趣,它一直按原样返回数组。任何人都可以指出正确的方向并解释为什么会这样?

-编辑- 底线:我需要它返回一个常规数组对象,例如未键入的起始对象。

最佳答案

如果 encUint8ClampedArrayArray,则此单行语句应该有效:

var flattened = Uint8ClampedArray.from(enc.reduce((a, b) => [...a, ...b], []));

这相当于:

var flattened = Uint8ClampedArray.from(enc.reduce(function(a, b){
  return Array.from(a).concat(Array.from(b));
}, []));

要回答关于为什么 reduce 对您不起作用的实际问题:

[].concat(Uint8ClampedArray([1, 2, 3, 4]));

不幸的是,不返回 [1, 2, 3, 4],而是返回 [Uint8ClampedArray[4]]concat 不适用于类型化数组。

关于javascript - 如何展平夹紧的阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089208/

相关文章:

javascript - 创建iframe中的js对象

arrays - 在 Swift 4.0 中过滤结构数组

php - 数组转换为 mysql 列语法

javascript - json 在 stringify 期间不包含对象名称

javascript - 左键的轮播动画无法正常工作

javascript - JS : Check string if it is failing for some rules

c - 二维数组和指向指针的指针

c - 如何对 char 数组的数组使用指针?

javascript - 使用 JavaScript 使高度与动态宽度相同不起作用

javascript - JavaScript 中类型化数组的优点是它们在 C 中的工作方式相同还是相似?