【问题标题】:Split a declartion of an array string into an array of strings将数组字符串的声明拆分为字符串数组
【发布时间】:2018-08-09 18:08:45
【问题描述】:

使用 javascript/jquery 将数组声明的字符串拆分为字符串数组的最佳方法是什么?我正在使用的字符串示例:

 franchise[location][1][location_name]

我希望将其转换为如下数组:

['franchise', 'location', '1', 'location_name']

奖励:如果我也可以一举将那个数值变成一个整数,而不仅仅是一个字符串,那就太棒了。

【问题讨论】:

  • 出于什么原因需要这样做?这听起来很像 X/Y 问题,您询问的是尝试过的解决方案,而不是描述实际问题,而实际上可能有更好、更简单的解决方案
  • 第一个字符串实际上是动态创建输入的名称元素。所有非数字元素都是不断生成的,但在创建该输入的每次迭代中,数字都会发生变化。我需要知道“位置编号”,以便在用户修复验证问题后删除验证标志。
  • 那么反过来,该字符串必须来自某个地方,所以1 值必须可以从那里检索/访问...?
  • 我正在 php 端进行验证,如果发现该标签中的元素有错误,则向 jquery tab 元素添加一个类。一旦用户满足验证要求,我可以删除单个错误消息,但正确的选项卡更难定位。我尝试使用$(this).closest('.tab'),但 jQuery 没有找到它。

标签: javascript jquery arrays split


【解决方案1】:

您可以将String.split 与匹配所有非字母数字字符的正则表达式一起使用。

类似的东西:

const str = 'franchise[location][1][location_name]';
const result = str.split(/\W+/).filter(Boolean);
console.log(result);

【讨论】:

    【解决方案2】:

    一种选择是只匹配单词字符:

    console.log(
      'franchise[location][1][location_name]'.match(/\w+/g)
    );

    要将“1”转换为数字,您可以在之后.map

    const initArr = 'franchise[location][1][location_name]'.match(/\w+/g);
    console.log(initArr.map(item => !isNaN(item) ? Number(item) : item));

    【讨论】:

    • 您的正则表达式中不需要g。如果你坚持下去,它会使比赛变慢。
    • 你确实需要/g - 否则,你只会得到[ "franchise" ]
    【解决方案3】:

    你可以试试

     const str = 'franchise[location][1][location_name]';
     const res = str.split(/\W+/).map(i => { return Number(i) ? Number(i) : i;})
    

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 2012-02-22
      • 2011-01-10
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      相关资源
      最近更新 更多