如何压扁夹紧的阵列

iom*_*omv 10 javascript arrays flatten multidimensional-array

在那一刻,我发现自己陷入了试图压扁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);
}, []);
Run Code Online (Sandbox Code Playgroud)

与concat

data = [].concat.apply([], enc);
Run Code Online (Sandbox Code Playgroud)

并通过一个功能

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

但到目前为止还没有任何快乐,它不断回归阵列.任何人都可以指出我正确的方向并解释为什么会这样?

-EDIT-底线:我需要它来返回一个常规的Array对象,就像未键入的起始对象一样.

Seb*_*mon 7

如果encArray一个Uint8ClampedArray s,则此单行语句应该有效:

\n\n
var flattened = Uint8ClampedArray.from(enc.reduce((a, b) => [...a, ...b], []));\n
Run Code Online (Sandbox Code Playgroud)\n\n

这相当于:

\n\n
var flattened = Uint8ClampedArray.from(enc.reduce(function(a, b){\n  return Array.from(a).concat(Array.from(b));\n}, []));\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

回答您的实际问题:为什么reduce\xe2\x80\x99 不适合您的实际问题:

\n\n
[].concat(Uint8ClampedArray([1, 2, 3, 4]));\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,\xe2\x80\x99t 没有返回,[1, 2, 3, 4]但是[Uint8ClampedArray[4]].concat\xe2\x80\x99 不适用于类型化数组。

\n