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对象,就像未键入的起始对象一样.
如果enc是Array一个Uint8ClampedArray s,则此单行语句应该有效:
var flattened = Uint8ClampedArray.from(enc.reduce((a, b) => [...a, ...b], []));\nRun Code Online (Sandbox Code Playgroud)\n\n这相当于:
\n\nvar flattened = Uint8ClampedArray.from(enc.reduce(function(a, b){\n return Array.from(a).concat(Array.from(b));\n}, []));\nRun Code Online (Sandbox Code Playgroud)\n\n回答您的实际问题:为什么reduce\xe2\x80\x99 不适合您的实际问题:
[].concat(Uint8ClampedArray([1, 2, 3, 4]));\nRun Code Online (Sandbox Code Playgroud)\n\n不幸的是,\xe2\x80\x99t 没有返回,[1, 2, 3, 4]但是[Uint8ClampedArray[4]].concat\xe2\x80\x99 不适用于类型化数组。