如何在JavaScript中更改数组中某些元素的数据类型

ski*_*yho 2 javascript arrays

我想改变(嵌套)数组中某些元素的类型,我知道的唯一方法是运行for循环.

请看下面的例子:

数据是形式的

var chartdata = [
  ["1980/01/23", 95, 100, 98, 110],
  ["1980/01/24", 98, 98, 102, 103],
  ["1980/01/25", 90, 102, 95, 105],
  ["1980/01/26", 93, 95, 103, 103],
  ["1980/01/27", 94, 103, 104, 105],
];
Run Code Online (Sandbox Code Playgroud)

我想换到

var new_data = [
  [new Date("1980/01/23"), 95, 100, 98, 110],
  [new Date("1980/01/24"), 98, 98, 102, 103],
  [new Date("1980/01/25"), 90, 102, 95, 105],
  [new Date("1980/01/26"), 93, 95, 103, 103],
  [new Date("1980/01/27"), 94, 103, 104, 105],
];
Run Code Online (Sandbox Code Playgroud)

我提出的唯一方法是for循环

function transform(arr) {
  var new_arr = [];

  for (var i = 0; i < arr.length; i++) {
    var sub_arr = [];
    for (var j = 0; j < arr[i].length; j++) {
      if (j == 0) {
        sub_arr.push(new Date(arr[i][j]));
      } else {
        sub_arr.push(arr[i][j]);
      }
    }
    new_arr.push(sub_arr);
  }
  return new_arr
}
alert(transform(chartdata));
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?

Cer*_*nce 6

使用.map一个数组转换为另一种:

const chartdata = [
  ["1980/01/23", 95, 100, 98, 110],
  ["1980/01/24", 98, 98, 102, 103],
  ["1980/01/25", 90, 102, 95, 105],
  ["1980/01/26", 93, 95, 103, 103],
  ["1980/01/27", 94, 103, 104, 105],
];
const newData = chartdata.map(([dateStr, ...rest]) => [new Date(dateStr), ...rest]);
console.log(newData);
Run Code Online (Sandbox Code Playgroud)

对于ES5兼容性,您将无法使用休息/传播和箭头功能,因此另一个选项是:

var chartdata = [
  ["1980/01/23", 95, 100, 98, 110],
  ["1980/01/24", 98, 98, 102, 103],
  ["1980/01/25", 90, 102, 95, 105],
  ["1980/01/26", 93, 95, 103, 103],
  ["1980/01/27", 94, 103, 104, 105],
];
var newData = chartdata.map(function(arr) {
  var date = new Date(arr[0]);
  return [date].concat(arr.slice(1));
});
console.log(newData);
Run Code Online (Sandbox Code Playgroud)