如何将1个键值拆分为2个键值

时间:2019-03-22 18:41:24

标签: javascript arrays

我是JavaScript新手。我有以下对象:

let obj1 =
[{
  'id': 1,
  'longString': 'Joe - 2011-04-23T18:25:23.511Z'
},
{
  'id': 2,
  'longString': 'Mary - 2010-04-23T18:25:23.511Z'
}];

我想将longString键拆分为2个键,并将值拆分为2个值。

这就是我想做的:

let obj2 =
[{
  'id': 1,
  'name': 'Joe',
  'date': '2011-04-23T18:25:23.511Z'
},
{
  'id': 2,
  'name': 'Mary',
  'date': '2010-04-23T18:25:23.511Z'
}];

我已经尝试过分块进行,但是我坚持将第一块分给longString的值。

这适用于字符串:

let v = 'Mary - 2010-04-23T18:25:23.511Z';
let w = v.split(' -', 1);

如何使其适用于某个对象?还是有一种完全不同的方式来分割属性值?另外,我是否需要编写一个循环来将obj1分配给obj2

3 个答案:

答案 0 :(得分:4)

您可以在数组上map,并为每个对象拆分longString。使用destructuring将拆分分为namedate变量

let obj1 =
[{
  'id': 1,
  'longString': 'Joe - 2011-04-23T18:25:23.511Z'
},
{
  'id': 2,
  'longString': 'Mary - 2010-04-23T18:25:23.511Z'
}];

const output = obj1.map(a => {
  let [name, date] = a.longString.split(" - ");
  return { id: a.id, name, date }
})

console.log(output)

答案 1 :(得分:2)

您可以简单地使用map\s+-\s+模式进行拆分。 split的第二个参数是指定输出中所需元素的数量

let obj1 =[{'id': 1,'longString': 'Joe - 2011-04-23T18:25:23.511Z'},{ 'id': 2, 'longString': 'Mary - 2010-04-23T18:25:23.511Z'}];

let op = obj1.map(({id, longString}) => {
  let [name, date] = longString.split(/\s+-\s+/,2)
  return { id, name, date }
})

console.log(op)

答案 2 :(得分:0)

let obj1 = [{
    'id': 1,
    'longString': 'Joe - 2011-04-23T18:25:23.511Z'
  },
  {
    'id': 2,
    'longString': 'Mary - 2010-04-23T18:25:23.511Z'
  }
];


const res = obj1.map(({
  id,
  longString
}) => ({
  id,
  name: longString.match(/\w+/)[0],
  date: longString.match(/\d+.*/)[0],
}))

console.log(res)