避免字符串 "null" 使用 javascript 的拆分方法
Avoid string "null" using split method of javascript
我正在尝试解析具有以下格式的字符串
"value1=name1:value2=test1,value1=name2:value2=null,value1=null:value2=test3"
我希望将其解析为
[{ value1: "name1", value2: "test1"}, { value1: "name2", value2: "NA"},{ value1: "NA", value2: "test3"}]
如果任何值 post splititng 为 null ,则 make 为“NA”。由于我使用的是 split
空值被强制转换为字符串。因此,使用 nullish coalescing(??)
设置“NA”不起作用,因此它仍然是 returns null 而不是 NA。这也会有所帮助,如果有人可以提出一种更简单的方法来实现这一点
我试过的代码。
let input = "value1=name1:value2=test1,value1=name2:value2=null,value1=null:value2=test3";
let items = input.split(",");
let pairs = items.map((item) => {
let splitItems = item.split(":");
let value1 = splitItems[0].split("=")?? "NA";;
let value2 = splitItems[1].split("=") ?? "NA";
return { value1, value2 };
});
你可以试试这个:
(string || '').split("=") || "NA";
你可以使用三元运算符
const str =
"value1=name1:value2=test1,value1=name2:value2=test2,value1=null:value2=test3"
const res = str.split(",").map((el) =>
el.split(":").reduce((acc, pair) => {
const [key, value = "NA"] = pair.split("=")
return {
...acc,
[key]: value === "null" ? "NA" : value,
}
}, {})
)
console.log(res)
也许这不是一种更简单但更简单且更省事的字符串解析方法,而且它的用途广泛,可以提供尽可能多的键值对
const input = "value1=name1:value2=test1:value3=name3:value4=test4,value1=name2:value2=test2,value1=null:value2=test3";
const mappedKey = {
value3: 'someNewKey1',
value4: 'someNewKey2',
};
const parseData = (input) => {
// replace directly all null values before splitting
const stream = input.replace(/null/g, 'NA');
// now split by comma and equal sign
const parsedStream = stream.split(",").map((fragment) => {
// build a key value object, to be able to collect n value pairs
const obj = {};
// split groups by -> :
const values = fragment.split(':').map((split) => {
// split key value pairs by -> =
return split.split('=');
});
// collect the key value pais into obj
values.forEach((data) => {
const [key, value] = data;
obj[mappedKey[key] || key] = value;
});
// return the final result
return obj;
});
return parsedStream;
}
window.onload = () => {
document.querySelector('.input').innerHTML = input;
document.querySelector('.result').innerHTML = JSON.stringify(parseData(input), null, 2);
}
<h3>Input:</h3>
<pre class="input"></pre>
<hr />
<h3>Parsed result:</h3>
<pre class="result"></pre>
使用 Object.fromentries 怎么样,因为您的拆分显示格式为 [],[].
的两个值
let input = "value1=name1:value2=test1,value1=name2:value2=test2,value1=null:value2=test3";
let items = input.replace(/null/g, 'NA').split(",");
let pairs = items.map((item) => {
let splitItems = item.split(":");
let value5 = splitItems[0].split("=");
let value6 = splitItems[1].split("=");
return Object.fromEntries([value5,value6])
});
console.log(pairs)
我正在尝试解析具有以下格式的字符串
"value1=name1:value2=test1,value1=name2:value2=null,value1=null:value2=test3"
我希望将其解析为
[{ value1: "name1", value2: "test1"}, { value1: "name2", value2: "NA"},{ value1: "NA", value2: "test3"}]
如果任何值 post splititng 为 null ,则 make 为“NA”。由于我使用的是 split
空值被强制转换为字符串。因此,使用 nullish coalescing(??)
设置“NA”不起作用,因此它仍然是 returns null 而不是 NA。这也会有所帮助,如果有人可以提出一种更简单的方法来实现这一点
我试过的代码。
let input = "value1=name1:value2=test1,value1=name2:value2=null,value1=null:value2=test3";
let items = input.split(",");
let pairs = items.map((item) => {
let splitItems = item.split(":");
let value1 = splitItems[0].split("=")?? "NA";;
let value2 = splitItems[1].split("=") ?? "NA";
return { value1, value2 };
});
你可以试试这个:
(string || '').split("=") || "NA";
你可以使用三元运算符
const str =
"value1=name1:value2=test1,value1=name2:value2=test2,value1=null:value2=test3"
const res = str.split(",").map((el) =>
el.split(":").reduce((acc, pair) => {
const [key, value = "NA"] = pair.split("=")
return {
...acc,
[key]: value === "null" ? "NA" : value,
}
}, {})
)
console.log(res)
也许这不是一种更简单但更简单且更省事的字符串解析方法,而且它的用途广泛,可以提供尽可能多的键值对
const input = "value1=name1:value2=test1:value3=name3:value4=test4,value1=name2:value2=test2,value1=null:value2=test3";
const mappedKey = {
value3: 'someNewKey1',
value4: 'someNewKey2',
};
const parseData = (input) => {
// replace directly all null values before splitting
const stream = input.replace(/null/g, 'NA');
// now split by comma and equal sign
const parsedStream = stream.split(",").map((fragment) => {
// build a key value object, to be able to collect n value pairs
const obj = {};
// split groups by -> :
const values = fragment.split(':').map((split) => {
// split key value pairs by -> =
return split.split('=');
});
// collect the key value pais into obj
values.forEach((data) => {
const [key, value] = data;
obj[mappedKey[key] || key] = value;
});
// return the final result
return obj;
});
return parsedStream;
}
window.onload = () => {
document.querySelector('.input').innerHTML = input;
document.querySelector('.result').innerHTML = JSON.stringify(parseData(input), null, 2);
}
<h3>Input:</h3>
<pre class="input"></pre>
<hr />
<h3>Parsed result:</h3>
<pre class="result"></pre>
使用 Object.fromentries 怎么样,因为您的拆分显示格式为 [],[].
的两个值let input = "value1=name1:value2=test1,value1=name2:value2=test2,value1=null:value2=test3";
let items = input.replace(/null/g, 'NA').split(",");
let pairs = items.map((item) => {
let splitItems = item.split(":");
let value5 = splitItems[0].split("=");
let value6 = splitItems[1].split("=");
return Object.fromEntries([value5,value6])
});
console.log(pairs)