【发布时间】: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])
}
}
【问题讨论】:
-
不使用拆分 - 根据类别使用
indexOf和lastIndexOf(与substring组合)
标签: javascript string split