首页 > 解决方案 > 将字符串转换为列表并分隔每个元素

问题描述

所以我有一个用例,我输入属于一轮的索引和描述。我创建了一个 JS 函数,允许我输入这些索引和描述。当我从发布请求中删除数据时,我得到以下数据:

['0,This is a testround', '1,This is a new testround']

我想拆分这些数据,以便我可以将索引变量中的 0 和描述变量中的以下描述“这是一个测试轮”分开。请注意,描述只能包含逗号。索引并不总是与数组的索引相对应:[[0,"Description1"],[5,"Description2"]] 可能发生

一个可能的解决方案是用逗号分割字符串,并使用 str[0] 作为索引,使用其他部分作为描述,但对我来说,这看起来像一个丑陋的解决方案。

我应该怎么办?

我使用以下 JS 将回合保存到一个 playerdata div 中,我从中提取上面的列表(其中项目是带有索引和描述的列表)

  function item_checkbox(items,n) {
return `
  <input type="checkbox" style="display:none;" name="${itemList[n]}" value="${items}" checked>
`
  }

  function add_to_itemData(items, n) {
    itemDataEl = document.getElementById(itemData[n])
    itemDataEl.innerHTML = itemDataEl.innerHTML + item_checkbox(items, n)
  }

感谢您提前提供任何帮助

标签: javascriptpythondjango

解决方案


虽然您说通过拆分来解决它是一个“丑陋”的解决方案,但我认为这是一个非常简单的例程,考虑到数据返回给您的格式。

['0,This is a testround', '1,This is a new testround'].map(v => v.split(','));

...将正确转换为:

[
    [ "0", "This is a testround" ],
    [ "1", "This is a new testround" ]
]

但我想我明白你的意思。有一些可能的问题 - 例如,密钥唯一性问题。您可以通过将每一行保留为 Javascript 对象而不是数组来解决这个问题,并且您可以使用 很容易地转换它Object.fromEntries(),因为它可以方便地接受每一行二维数组作为键/值对:

Object.fromEntries([
    [ "0", "This is a testround" ],
    [ "1", "This is a new testround" ],
    [ "1", "This is a dupe testround" ] // this will overwrite the previous entry
]);

// {0: "This is a testround", 1: "This is a dupe testround"}

您可能需要采取一些额外的步骤来进行额外的控制,例如使用.trim()删除前导或尾随空格或使用自定义正则表达式测试/过滤/拆分它们。


推荐阅读