我是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
?
答案 0 :(得分:4)
您可以在数组上map
,并为每个对象拆分longString
。使用destructuring将拆分分为name
和date
变量
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)