如何用包含字符串的对象建立数组?

我试图将下面的数据结果创建为key-value对,我们如何使用JS分割功能来实现这个任务,在这里被卡住了。

main.js

const data = [{
        "Row ID  O ID    O Date  Ship Date   Ship Type": "1   PA-152156   11/9/20 01/19/16"
    }

]
    function buildArray(data) {
      for(item in arr) {
      let string = item;
      let array  = string
      .replace(/" "\s/g, '####')
      .split(' ')
      .map(pair => {
        let split = pair.split('####');
        return { key: split[0], value: split[1] };
      });
     }
    }

console.log(buildArray(data));

预期输出

[{
    "Row ID": 1,
    "O ID": "PA-152156",
    "O Date": "11/9/20",
    "Ship Date": "01/19/16"
}]

tsvFile数据

Row ID  O ID    O Date  Ship Date   Ship Type   Customer ID Customer Name   Seg Country City    State   Zip Code    Region  Product ID  Category    Sub-Category    Product Name    Sales   Quantity    Discount    Profit
1   PA-152156   11/9/20 01/19/16    Second Class    CG-125  Clay bute   Consumer    United States   Henderson   Kentucky    42420   South   FUR-BO-10001798 Furniture   Bookcases   Bush, Somerset Collection Bookcase? 261.96  2   0   41.9136

解决方案:

我们可以从你的原始数据开始,写一个函数,把一个TSV字符串(带头)转换成一个对象数组。

这个 tsv2arr (略改自 早先的回答)通过首先修剪任何前导或尾部的空白,在新行上进行分割,并在制表符上分割每一行。 第一行的输出成为头字段名,其余的则通过取每个值并将其与同一索引的头字段配对而被还原成对象。 看起来像数字的值会被转换为数字;这可能会转换一些你不想转换的东西,但如果你需要改变它们,你可以再进行后处理。

代码相当简单。

const tsv2arr = (tsv) => {
  const [headers, ...rows] = tsv .trim () .split ('\n') .map (r => r .split ('\t'))
  return rows .reduce ((a, r) => [
    ... a, 
    Object .assign (... (r .map (
      (x, i, _, c = x.trim()) => ({[headers [i].trim()]: isNaN(c) ? c : Number(c)})
    )))
  ], [])
}

const tsv = `
Row ID	O ID    	O Date	Ship Date	Ship Type	Customer ID	Customer Name	Seg      	Country	        City    	State   	Zip Code	Region	Product ID	Category	Sub-Category	Product Name                    	Sales	Quantity	Discount	Profit
1	PA-152156	11/9/20	01/19/16	Second Class	CG-125  	Clay bute	Consumer	United States	Henderson	Kentucky	42420   	South	FUR-BO-10001798	Furniture	Bookcases	Bush, Somerset Collection Bookcase?	261.96	2        	0        	41.9136
2	ST-621973	8/9/20	02/10/16	First Class	XY-139  	Foobar Inc	Consumer	United States	Madison 	Wisconsin	53702   	Midwest	FUR-SO-10003869	Furniture	Sofas   	Tyler, Some Random Sofa Name    	963.85	1        	0        	265.89
3	MQ-169437	12/7/20	03/15/16	Second Class	CG-125  	Clay bute	Consumer	United States	Henderson	Kentucky	42420   	South	FUR-DE-10005309	Furniture	Desk    	Adams, Some Random Desks Name?  	654.13	1        	0        	143.28
`


console .log (
  tsv2arr (tsv)
)
.as-console-wrapper {min-height: 100% !important; top: 0}

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在使用Java API创建索引时使用模板?

2022-9-8 12:06:37

未分类

在R中创建一个单表,提供A列在B列和C列之间的平均值[重复]

2022-9-8 12:06:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索