2017-04-04 10 views
0

はJavaScript:SplitAtFirst( ':')私のような(静的)のルックアップを持って

LookupValue = ['Something: A', 'Something: B', 'Something: C', 'Something: D: Classified Group 1', 'Something: D: Classified Group 2', 'Something: D: Classified Group 3', 'Anything: X', 'Anything: Y'] 

コードlookupfamilyとその値をマッピングするためにここに、

MapValue = LookupValue().reduce(function (map, item) { 
      var key = item.split(':')[0]; 
      map[key] = map[key] || []; 
      map[key].push(item.split(':')[1] || []);    
      return map; 
     }, {}); 

実際の結果:

MapValue 
{...} 
    __proto__: {...} 
    Something: [ A, B, C, D, D, D] 
    Anything: [X, Y] 

期待される結果:

MapValue 
{...} 
    __proto__: {...} 
    Something: [ A, B, C, D: Classified Group 1, D: Classified Group 2, D: Classified Group 3] 
    Anything: [X, Y] 

このような使用方法はありますか?map[key].push(item.splitAtFirst(':')[1] || [])

これに関するご提案は非常に役に立ちます。これはあなたを助けるかもしれ

+0

最初の項目を削除します分割された部分の配列から削除し、残りの部分を再び結合します...? – CBroe

答えて

1

MapValue = LookupValue.reduce(function (map, item) { 
     var key = item.split(':')[0]; 
     map[key] = map[key] || []; 
     map[key].push(item.substring(key.length + 1) || []); // Change is here 
     return map; 
    }, {}); 

Split()は、文字列の配列あなたを与えるだろう。代わりに、具体的lodashで

+0

それは素晴らしいです!どうもありがとう !! –

0

第二の要素(key[1])を取るために、あなたは元の文字列(item)から、キー(+1 for ':')である第一の要素を、削除することができますと言って:

var grouped = _.groupBy(LookupValue,q=>q.substring(0,q.indexOf(':'))) 
    Object.keys(grouped).forEach(key=>{ grouped[key] = grouped[key].map(x=>x.substring(x.indexOf(':')+1,x.length).trim())}) 
関連する問題