要将这个数据:
[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]
转换成如下数据结构:
{
THEDTAE: ['2023-05-09','2023-05-10'],
QTYPE: 1,
UNITTYPE: 2
}
请教下如何实现?
function transform(str) {
var ret = {};
var reg = /\[(.+?)\]/g;
var arr = str.split("|");
for (var i = 0; i < arr.length; ++i) {
var match, key, value = [];
while (match = reg.exec(arr[i])) value.push(match[1]);
if (key = value.shift()) {
if (value.length <= 1) value += "";
ret[key] = value;
}
}
return ret;
}
console.log(transform("[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]"));
const str = "[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]";
const arr = str.split("|");
const reg = /\[(.+?)\]/g;;
const obj = arr.reduce((obj, item) => {
const match = [...item.matchAll(reg)];
if (match.length) {
obj[match[0][1]] = match.length > 2
? match.slice(1).map(item => item[1])
: match[1] && match[1][1]
}
return obj;
}, {});
console.log(obj, "obj")
// { THEDTAE: [ '2023-05-09', '2023-05-10' ], QTYPE: '1', UNITTYPE: '2' } obj
const data = "[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]";
const extract = (str) => {
let left = 0;
let right = 0;
let result = [];
let tmp = "";
for (let i = 0; i < str.length; i++) {
const item = str[i];
if (left === 1 && right === 1) {
result.push(tmp);
tmp = "";
left = 0;
right = 0;
}
if (item === "[") {
left = 1;
} else if (item === "]") {
right = 1;
} else {
tmp += item;
}
}
result.push(tmp);
return result;
};
function parse(str) {
const result = str.split("|");
let rsOb = {};
result.forEach((item) => {
const list = extract(item);
let ob = {};
ob[list.shift()] = list.length === 1 ? list[0] : list;
rsOb = { ...rsOb, ...ob };
});
return rsOb;
}
console.log(parse(data));
方法一:
const data = "[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]";
// 解析数据
const dataArray = data.split("|");
// 使用Map数据结构来存储转换后的数据
const convertedData = new Map();
// 遍历数据数组
dataArray.forEach(item => {
// 提取标签和值
const [label, value] = item.replace("[", "").split("]");
// 使用解构赋值和Map的特性来添加值到转换后的数据对象中
if (convertedData.has(label)) {
// 如果标签已经存在,则将值添加到数组中
convertedData.get(label).push(value);
} else {
// 如果标签不存在,则创建一个新的数组并添加值
convertedData.set(label, [value]);
}
});
// 将Map数据结构转换为普通对象
const convertedObject = Object.fromEntries(convertedData);
console.log(convertedObject);
方法二:
const data = "[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]";
// 解析数据
const dataArray = data.split("|");
// 创建一个空对象来存储转换后的数据
const convertedData = {};
// 遍历数据数组
dataArray.forEach(item => {
// 提取标签和值
const [label, value] = item.replace("[", "").split("]");
// 根据标签将值添加到转换后的数据对象中
if (convertedData[label]) {
// 如果标签已经存在,则将值添加到数组中
convertedData[label].push(value);
} else {
// 如果标签不存在,则创建一个新的数组并添加值
convertedData[label] = [value];
}
});
console.log(convertedData);
ts写法
const data: string = "[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]";
// 解析数据
const dataArray: string[] = data.split("|");
// 使用Map数据结构来存储转换后的数据
const convertedData: Map<string, string[]> = new Map();
// 遍历数据数组
dataArray.forEach((item: string) => {
// 提取标签和值
const [label, value]: string[] = item.replace("[", "").split("]");
// 使用解构赋值和Map的特性来添加值到转换后的数据对象中
if (convertedData.has(label)) {
// 如果标签已经存在,则将值添加到数组中
convertedData.get(label)?.push(value);
} else {
// 如果标签不存在,则创建一个新的数组并添加值
convertedData.set(label, [value]);
}
});
// 将Map数据结构转换为普通对象
const convertedObject: { [key: string]: string[] } = Object.fromEntries(convertedData);
console.log(convertedObject);
const str = '[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]';
// 使用正则表达式解析原始字符串
const reg = /\[(\w+)\]\[([\d-]+)\]/g;
let match;
const result = {};
while ((match = reg.exec(str))) {
const key = match[1];
const value = match[2];
if (result[key]) {
result[key].push(value);
} else {
result[key] = [value];
}
}
// 将解析后的数据组装成目标数据结构
const output = {};
for (const [key, value] of Object.entries(result)) {
if (value.length === 1) {
output[key] = value[0];
} else {
output[key] = value;
}
}
console.log(output);
const str = '[THEDTAE][2023-05-09][2023-05-10]|[QTYPE][1]|[UNITTYPE][2]';
const obj = {}
str.split('|').forEach(item => {
var list = item.match(/\[[^\[\]]*\]/g).map(i=>i.replace(/[\[\]]/g, ''))
var key = list[0]
var valArr = list.slice(1)
var val = valArr.length>1?valArr:valArr[0]
obj[key] = val
})
console.log(obj)
上边格式如何转换为以下格式
下面数据格式有什么比较优雅的转换方式吗? 请各位大佬解惑
以下是我正在使用的数据结构示例- 所有数据都在字符串中,包括子列表都是字符串值 子列表值可能与其他子列表值重复 我需要能够获得大小并遍历子列表 本质上,每个子列表都有我需要获取的引用ID,以及与该列表关联的子列表ID 我不知道哪一个最合适。我可能会先选择我能实施的那个。 我应该使用、、还是与列表一起使用?
问题内容: 假设我有一个结构: 与数据库表具有相同的架构。将数据库行解析为结构的最简单方法是什么?我在下面添加了一个答案,但是我不确定这是最好的答案。 问题答案: 这是一种实现方法-只需在函数中手动分配所有结构值即可。
问题内容: 如何在spark数据帧中强制转换结构数组? 让我通过一个例子来说明我要做什么。我们将从创建一个数据框开始,该数据框包含行和嵌套行的数组。我的整数尚未在数据框中强制转换,它们已创建为字符串: 这是创建的数据框的架构: 我想做的是将所有可以为整数的字符串都转换为整数。我尝试执行以下操作,但没有成功: 我有以下异常: 任何人都有正确的查询将所有值转换为INTEGER吗?我将不胜感激。 非常感
想要的结果: 刚刚问的那个搞错了 谢谢大家,我自己搞出来了已经,