JavaScript String split()

时间:2015-09-28 17:57:23

标签: javascript string split

我们有多条记录,每条记录都有一个资产清单。 assest列表由多个客户端名称和站点组成(name-site,name-site_2,name2-site_3,name3-site_4)。

我试图拆分资产列表,最后得到两个列表,一个是所有名称中的一个,另一个是所有站点中的一个(我只想显示每个列表中的唯一名称) 。我在逗号处分裂,然后在连字符处再次拆分

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

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

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

有什么想法吗?

示例资产列表: category ==" animals" 如果有两个连字符,我需要在第二个分开。 assetList ="鱼标,猫咪,蓝狗亨利,红鸟票据,绿蛇拉里"

category ==" fruit" 如果有两个连字符,我需要先拆分。 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])
                }
            }

1 个答案:

答案 0 :(得分:0)

这是一种使用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
   */