首页 > 解决方案 > 如何将字符串分解为对象数组

问题描述

我想打破这个字符串:

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 中发布的过去问题中找不到类似的内容。

标签: javascript

解决方案


这需要做很多事情:

  • 分成几行
  • 过滤掉无意义的行
  • 4人一组
  • 从每个组创建一个对象

这是我对它的看法,使用chunkand objectFromPairsfrom 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);


推荐阅读