连接不同类型的数组

Concatinate different type arrays

假设,array1 = ['B', 'G', 'R', 'A'],array2是Uint8Array,如何连接这两个数组?

我用了var array3 = array1.concat(array2),但是结果好像不对,而且array3.length总是5,不管array2的内容如何。

您的结果 (array3) 也必须是一个 Uint8Array 数组。

因此,在您的示例中,以下内容应该可以满足您的需求:

const array3 = new Uint8Array([ ...array1, ...array2]);

你可以这样做:

var array2 = Array.from(uint8Array);
var array3 = array1.concat(array2);

您的代码正在创建一个新数组,其中包含四个字符串,后跟 Uint8Array 作为单个元素。

Array.prototype.concat is an odd beast. If you give it arguments that aren't "concat spreadable”(例如,不是数组的东西),它将这些值作为简单元素包含在它创建的数组中。

类型化数组 concat 不可扩展:

const uint8 = Uint8Array.from([3, 4]);
console.log(uint8[Symbol.isConcatSpreadable]); // undefined (and the default is false)
const softArray = [1, 2];
const result = softArray.concat(uint8);
console.log(result.length); // 3
console.log(result[0]); // 1
console.log(result[1]); // 2
console.log(result[2]); // (A Uint8Array containing 3, 4)

您可以使用点差代替 concat:

const array1 = ['B',  'G',  'R',  'A'];
const array2 = Uint8Array.from([1, 2, 3]);
const result = [...array1, ...array2];
console.log(result); // ["B", "g", "R", "a", 1, 2, 3]