javascript - 如何将字符串分解为对象数组
问题描述
我想打破这个字符串:
data=
1.
Title: The Definitive Guide
Copy: There’s no way around it,
URL: http://www.schools
Date: 6/7/17
2.
Title: Using
Copy: Today’s fast
URL: https://blog
Date: 6/16/17
3.
Title: 4 Ways
Copy: Let’s state
URL: https://www.
Date: 6/20/17
在这种情况下,放入一个长度 = 3 的数组中(上面的每个编号都有一个)。每个数组项都应该是一个具有以下属性的对象:title、copy、url、date。
我试过这个:
for(let i=0; i<3; i++) {
arr[i] =temp.split(i+2 + ".");
temp=temp.slice(0, arr[i].length);
};
也许甚至还有一个更简单的字符串方法。在 SO 中发布的过去问题中找不到类似的内容。
解决方案
这需要做很多事情:
- 分成几行
- 过滤掉无意义的行
- 4人一组
- 从每个组创建一个对象
这是我对它的看法,使用chunk
and objectFromPairs
from 30secondsofcode(免责声明:我是项目/网站的维护者)以及多种Array
方法:
var data = `
1.
Title: The Definitive Guide
Copy: There’s no way around it,
URL: http://www.schools
Date: 6/7/17
2.
Title: Using
Copy: Today’s fast
URL: https://blog
Date: 6/16/17
3.
Title: 4 Ways
Copy: Let’s state
URL: https://www.
Date: 6/20/17
`;
const chunk = (arr, size) =>
Array.from({
length: Math.ceil(arr.length / size)
}, (v, i) =>
arr.slice(i * size, i * size + size)
);
const objectFromPairs = arr => arr.reduce((a, [key, val]) => ((a[key] = val), a), {});
const dataArr = chunk(
data.trim().split('\n')
.filter(v => v.trim().indexOf(':') !== -1)
.map(x => {
let t = x.split(':');
return [t[0], t.slice(1).join(':')].map(v => v.trim())
}), 4
).map(o => objectFromPairs(o));
console.log(dataArr);