避免字符串 "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)