2015-09-28 4 views
0

У нас есть несколько записей, каждая запись имеет список активов. Список советов состоит из нескольких имен и сайтов клиентов (имя-сайт, имя-сайт_2, имя2-сайт_3, имя3-сайт_4).JavaScript String split()

Я пытаюсь разбить список активов, чтобы в итоге было два списка, одно из всех имен и один из всех сайтов (я хочу показать только то, что уникально в каждом списке). Я раскалываюсь в запятой, а затем снова делюсь на дефис

Что я создал ниже, но недавно я столкнулся с некоторыми комбациями на клиентском сайте, которые имеют дополнительный дефис, что нарушает мое решение (я изначально разделите строку запятой, а затем разделите подстроки на дефис). Чтобы добавить еще одну морщину, дополнительный дефис не всегда находится в одном и том же месте, в зависимости от категории, это может быть первый дефис (в имени клиента) или второй дефис (на сайте), который должен быть проигнорирован, к счастью, это в соответствии с категорией (если категория == «животные»).

Для животных категории, если есть два дефиса, мне нужно игнорировать первое.

Для категории фрукты, если есть два дефиса, мне нужно игнорировать второй.

Любые идеи?

Примеры списков активов: категория == «животные» если есть два дефиса, мне нужно разделить на второй. Списка_Цифровых_Объектов = «рыба-знак, кот-джим, сине-собака-генри, красная птица-счет, зеленовато-змей-Лари»

категории == «фрукты» , если есть два дефиса, мне нужно раскол в первом. Списка_Цифровых_Объектов = "известково-генри, лимонно-Сюзан, банан-боб-Нелсон, яблочно-рик-Джоунс, ананас-сэм-кузнец"

Ниже мой код:

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]) 
       } 
      } 
+2

не использовать split - использовать 'indexOf' и' lastIndexOf' (в сочетании с 'подстрокой') в зависимости от категории – Igor

ответ

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 
    */