簡體   English   中英

如何在JavaScript中更改數組中某些元素的數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM