将一个字符串数组拆分为两个数组,每个数组都包含原始字符串的一部分

时间:2016-08-17 16:14:03

标签: javascript arrays json string

我正在处理JSON数据,其中一个我想要使用的项目实际上是两个格式化的信息,用|分开。

这是返回的字符串示例:“Rocket | Mission”。

我已将此信息提取到每个火箭的数组中任务,所以他们是数组中的30个项目

我有一个生成这个数组的for循环:

var names = ["rocket1 | mission1", "rocket2 | mission2", ...];

我正在尝试将该数组中的项分隔为:

var rocket = ["rocket1, rocket2, rocket3, ...];
var mission = ["mission1, mission2, mission3, ...];

这样我就可以分别循环并显示每个火箭和任务​​。

我尝试过使用substring(indexOf(" | ") +1);split();,但我一直在循环中需要循环内的循环。我是javascript的初学者,我不太了解语法和逻辑,无法弄清楚如何以及在哪里应用这些方法来获得我想要的东西。

希望这有意义感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

使用 split

进行功能性方法时使用forEach

let names = ["rocket1 | mission1", "rocket2 | mission2"]

let rocket = []
let mission = []

names.forEach(name => {
  let splat = name.split(' | ')

  rocket.push(splat[0])
  mission.push(splat[1])
  })

console.log(rocket)
console.log(mission)

答案 1 :(得分:3)

您可以将mapsplit一起使用:

var names = ["rocket1 | mission1", "rocket2 | mission2"];

var rockets = names.map( name => name.split(' | ')[0] );
var missions = names.map( name => name.split(' | ')[1] );

console.log(rockets)
console.log(missions);

备选方案2

这使用reduce和解构来在一个周期内完成任务。 功能编程顽固派可能会喜欢这个,但对于那些不熟悉这些紧凑reduce构造的人来说,更难阅读。

var names = ["rocket1 | mission1", "rocket2 | mission2"];

var [rockets, missions] = names.reduce( (pairs, name, i) => 
    ([pairs[0][i], pairs[1][i]] = name.split(' | '), pairs)
, [[], []]);

console.log(rockets);
console.log(missions);

答案 2 :(得分:2)

就像斜视在评论中所说的那样,你想要创建两个数组,然后循环遍历原始数组,将其拆分为两个新数组

var rocket = [];
var mission = [];

for (var i = 0; i < names.length; i++) {
    var temp = names[i].split(" | ");
    rocket.push(temp[0]);
    mission.push(temp[1]);
}