在那一刻,我发现自己被困在尝试展平 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);
}, []);
}
但到目前为止没有任何乐趣,它一直按原样返回数组。任何人都可以指出正确的方向并解释为什么会这样?
-编辑- 底线:我需要它返回一个常规数组对象,例如未键入的起始对象。
最佳答案
如果 enc
是 Uint8ClampedArray
的 Array
,则此单行语句应该有效:
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/