【问题标题】:JavaScript String split()JavaScript 字符串拆分()
【发布时间】:2015-09-28 17:57:23
【问题描述】:

我们有多个记录,每个记录都有一个资产列表。资产列表包含多个客户名称和站点(name-site、name-site_2、name2-site_3、name3-site_4)。

我试图将资产列表拆分为两个列表,一个是所有名称,一个是所有站点(我只想显示每个列表中的独特之处)。我在逗号处拆分,然后在连字符处再次拆分

我在下面创建的内容有效,但最近我遇到了一些带有额外连字符的客户端组合,这破坏了我的解决方案(我最初用逗号分割字符串,然后用连字符分割子字符串)。要添加另一个皱纹,额外的连字符并不总是在同一个位置,取决于类别,它可能是需要忽略的第一个连字符(在客户名称中)或第二个连字符(在站点中),幸运的是,这是按类别一致(如果 category == "animals")。

对于动物类别,如果有两个连字符,我需要忽略第一个。

对于水果类别,如果有两个连字符,我需要忽略第二个。

有什么想法吗?

示例资产列表: 类别 == “动物” 如果有两个连字符,我需要在第二个处拆分。 assetList ="fish-mark, cat-jim, blue-dog-henry, red-bird-bill, green-snake-larry"

类别 == “水果” 如果有两个连字符,我需要先拆分。 assetList = "lime-henry、lemon-susan、banana-bob-nelson、apple-rick-jones、pineapple-sam-smith"

下面是我的代码:

var assetList = "fish-mark, cat-jim, blue-dog-henry, red-bird-bill, green-snake-larry";

var count = (assetList.match(/-/g) || []).length;//counts the hyphens (client-siteId combo)

var splitObj = {};
var comboObj = {};
var clientObj = {};
var siteObj = {};
var mainSplitObj = {};
var allClient = '';
var allSite = '';

mainSplitObj = assetList.split(', ');

    for (var i = 0; i < count; i++) {

        splitObj["split"+i] = mainSplitObj[0+i]; //puts the client-siteID into a substring
            comboObj["combo"+i] = splitObj["split"+i].split('-'); //splits the client-siteID at the dash
                clientObj["client"+i] = comboObj["combo"+i][0]; //puts the client name in a substring
                siteObj["site"+i] = comboObj["combo"+i][1]; //puts the siteid in a substring

                    allClient += clientObj["client"+i] +";"+ ' '; //cumulatively adds client substrings to allClient variable
                    allSite += siteObj["site"+i] +";" + ' '; //cumulatively adds site substrings to allSite variable

    }

        tempC = allClient.split(",")
        uniqueClient = []
            for (var i = 0; i < tempC.length; i++) {
                isIn = 0
                for (var j = 0; j < uniqueClient.length; j++) {
                    if (tempC[i] == uniqueClient[j]) {
                        isIn = 1
                    }
                }
                if (isIn == 0) {
                    uniqueClient.push(tempC[i])
                }
            }
        tempS = allSite.split(",")
        uniqueSite = []
            for (var i = 0; i < tempS.length; i++) {
                isIn = 0
                for (var j = 0; j < uniqueSite.length; j++) {
                    if (tempS[i] == uniqueSite[j]) {
                        isIn = 1
                    }
                }
                if (isIn == 0) {
                    uniqueSite.push(tempS[i])
                }
            }

【问题讨论】:

  • 不使用拆分 - 根据类别使用 indexOflastIndexOf(与 substring 组合)

标签: javascript string split


【解决方案1】:

这是一种处理 indexOf 和 lastIndexOf 的方法。它在最后一个而不是第二个连字符上拆分,在您的情况下会给您相同的结果。

// Split on first hyphen
var list = ["lime-henry", "lemon-susan", "banana-bob-nelson", "apple-rick-jones", "pineapple-sam-smith"];

  for (var i = 0; i < list.length; i++) {
    var delimiterIndex = list[i].indexOf("-");
    var item = list[i];
    var left = item.substring(0, delimiterIndex);
    var right = item.substring(delimiterIndex + 1, item.length);
    console.log(left, right);
  }

  /* outputs
   * lime henry
   * lemon susan
   * banana bob-nelson
   * apple rick-jones
   * pineapple sam-smith
  */

// Split on last hyphen
var list = ["fish-mark", "cat-jim", "blue-dog-henry", "red-bird-bill", "green-snake-larry"];

  for (var i = 0; i < list.length; i++) {
    var delimiterIndex = list[i].lastIndexOf("-");
    var item = list[i];
    var left = item.substring(0, delimiterIndex);
    var right = item.substring(delimiterIndex + 1, item.length);
    console.log(left, right);
  }

  /* outputs
   * fish mark
   * cat jim
   * blue-dog henry
   * red-bird bill
   * green-snake larry
   */

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多