![](/img/trans.png)
[英]JavaScript. How to change some data in object via function for array?
[英]How to change data type of some elements in an array in JavaScript
我想改變(嵌套)數組中某些元素的類型,我知道的唯一方法是運行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],
];
我想換到
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],
];
我提出的唯一方法是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));
有沒有更好的方法來實現這一目標?
使用.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);
對於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);
當然你可以這樣做:
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(arr => {
arr[0] = new Date(arr[0]);
return arr;
});
console.log(newData);
如果您不想改變原始數組:
const newData = chartdata.map(([...arr]) => {
arr[0] = new Date(arr[0]);
return arr;
});
您也可以在一行中使用param destruct這樣做:
const newData = chartdata.map(([date, ...rArr]) => [new Date(date), ...rArr]);
實際上是的,你正在復制每個內部數組的內容很多次,使用map
並分配新的值會起作用。
在這里你有一個工作的例子:
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], ]; 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 } function improvedTransform(arr) { return arr.map(item => { item[0] = new Date(item[0]); return item; }) } console.log(transform(chartdata)); console.log("-------"); console.log(improvedTransform(chartdata));
您可以使用map()
從現有數組創建一個新數組:
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 new_data = chartdata.map(function(i){ var date = new Date(i[0]); date = [date].concat(i.slice(1)); return date; }) console.log(new_data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.