Javascript数组操作——是否有更声明性的方法?

Javascript Array Manipulation - Is there a more declarative approach?

本文关键字:方法 声明 数组 操作 是否 Javascript      更新时间:2023-09-26

谢谢你看这里。我正在使用API,需要更改数据的格式。下面是返回数据的一个示例:

data: [
  { 
    status: "planned work",
    name: "123"
  },
  {
    status: "all good",
    name: "nqr"
  }
];

每条火车线路都有一个像"123"或"nqr"这样的名字,我想把每列火车分成它们自己的对象,这样它看起来就像这样:

data: [
  { 
    status: "planned work",
    name: "1"
  },
  { 
    status: "planned work",
    name: "2"
  },
  { 
    status: "planned work",
    name: "3"
  },
  {
    status: "all good",
    name: "n"
  },
  {
    status: "all good",
    name: "q"
  },
  {
    status: "all good",
    name: "r"
  }
];

我有一些工作代码,拆分名称并使用嵌套的.forEach循环将项目推入数组。工作代码:

function formatLinesData(lines) {
  var trains = [];
  lines.forEach( line => {
    line.name.split("").forEach(train => {
      trains.push({name: train, status: line.status});
    });
  });
  return trains;
}

有没有办法在没有嵌套循环的情况下实现这一点?寻找一个优雅的解决方案,如果你有的话。

谢谢

您可以这样做;

var data =  [
  { 
    status: "planned work",
    name: "123"
  },
  {
    status: "all good",
    name: "nqr"
  }
],
newData = [].concat(...data.map(o => o.name.split("").map(c => ({status: o.status, name: c}))));
console.log(newData);

您可以使用reduce -用空数组初始化它,然后遍历数据

data.reduce((prev,curr) => {
    for (let i=0; i<curr.name.length; i++) {
        prev.push({ name : curr.name[i], status : curr.status});
    }
    return prev;
},[]);