我想改变(嵌套)数组中某些元素的类型,我知道的唯一方法是运行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)
有没有更好的方法来实现这一目标?
使用.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)