map()在不同数组上的结果不同

时间:2016-02-13 16:32:19

标签: javascript arrays

为什么map()操作在不同类型的数组上运行时会生成不同的输出?

我认为下面的literalobj属于同一类型;为什么生成的数组有所不同?为什么非文字数组连接到一个元素?

为什么类型化数组不会创建字符串数组,而是返回原始类型数组?是否有规范要求地图操作不能将类型化数组转换为其他类型?

var literal = [1, 2, 3];
var obj = new Array([1, 2, 3]);
var typed = new Uint32Array([1, 2, 3]);


console.log(literal.map(String));
console.log(obj.map(String));
console.log(typed.map(String));

输出

Array [ "1", "2", "3" ] 
Array [ "1,2,3" ]
Uint32Array [ 1, 2, 3 ]

我正在运行Firefox 44.0 https://jsfiddle.net/6c8p465r/1/

1 个答案:

答案 0 :(得分:2)

首先,使用文字数组或使用Array构造函数会产生相同的结果,但是你没有正确使用构造函数。

以下将在数组内部生成一个数组,这就是为什么你只能以字符串格式返回一个数组。因此,当您在此上调用map时,正在映射的整个条目是内部数组。

subtitle: {
      text: function () {
          lastVal = this.yData[this.yData.length - 1];
          return 'Last Value: ' + lastVal;
      }
},

使用Array构造函数创建数组的正确方法是将值作为参数传递:

new Array([1, 2, 3]); // Produces [[1, 2, 3]]

new Array(1, 2, 3); // Produces [1, 2, 3] 有一些事情需要首先理解。

  1. 它包含无符号整数(不能转换为字符串)
  2. 它的构造函数与Uint32Array构造函数
  3. 不同

    如果您查看Array上的Mozilla examples,您会看到一个值数组在使用它时会被传递到构造函数中。