gpt4 book ai didi

javascript - 把这个字符串变成一个对象

转载 作者:行者123 更新时间:2023-11-28 13:03:03 25 4
gpt4 key购买 nike

我有这个字符串(称为数据)

||id: ticket/327364|Subject: TestSubject|Due: 2018||--||id: ticket/327366|Subject: TestTwo|Due: 2018|||

我想变成一个可以使用键/值访问的对象。步骤 1 将字符串拆分为“--”并删除所有“|”迹象。我就是这样做的

var dataArray = [];
data.split("--").forEach(function(x) {
var arr = x.split("|");
arr = arr.filter(function(e) {
return e;
});
dataArray.push(arr);
});

这给了我一个多维数组

[Array(3), Array(3)]
0: ["id: ticket/327364", "Subject: Beställning av inkoppling", "Due: Ej inställd"]
1: ["id: ticket/327366", "Subject: Beställning av inkoppling", "Due: Ej inställd"]

这就是我陷入困境的地方,因为我想在“:”上拆分每个数组。因此,Object.Due 将为我提供到期日期,而 Object.Subject 为我提供主题等。此外,它并不总是 id、主题和到期时间。有时可能会更少或更多条目。

我已经尝试过了

var result = {};
dataArray.forEach(function(x) {
x.forEach(function(y) {
var newArr = y.split(":");
newArr[1] && (result[newArr[0]] = newArr[1]);
});
});

这正是我想要的,它给了我一个像这样的对象。

{id: " ticket/327366", Subject: " TestTwo", Due: " 2018"}

但是,结果仅包含最后一个数组中的数据。就好像它覆盖了第一个。关于如何重新执行此操作有什么建议吗?另外,感觉有很多循环,但我只接触 JS 一两天,所以我还没有真正找到不同的方法。

最佳答案

在第二个代码块中,您仅构建一个对象:您需要一个数组,但 result 不是数组。将该对象声明移动到外循环内,并在每次迭代结束时将该对象推送到最终数组。请参阅我所做更改的代码中的注释:

var data = '||id: ticket/327364|Subject: TestSubject|Due: 2018||--||id: ticket/327366|Subject: TestTwo|Due: 2018|||';

var dataArray = [];
data.split("--").forEach(function(x) {
var arr = x.split("|");
arr = arr.filter(function(e) {
return e;
});
dataArray.push(arr);
});

var resultArray = []; // <--- final array
dataArray.forEach(function(x) {
var result = {}; // <--- one object per iteration
x.forEach(function(y) {
var newArr = y.split(":");
newArr[1] && (result[newArr[0]] = newArr[1]);
});
resultArray.push(result); // <--- push it
});
console.log(resultArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }

替代的函数式编程方式

这是一种替代方法,它使用了一些 ES6 功能,例如扩展语法、箭头函数、Object.assign 和计算属性语法:

const data = '||id: ticket/327364|Subject: TestSubject|Due: 2018||--||id: ticket/327366|Subject: TestTwo|Due: 2018|||';

const dataArray = data.split("--").map(x =>
Object.assign(...
x.split("|")
.filter(e => e)
.map(s => s.split(':'))
.map(([key, value]) => ({ [key]: value.trim() }))
)
);

console.log(dataArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 把这个字符串变成一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48944734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com