2016-05-20 9 views
0

私が設定したルールに基づいてドキュメントの出現数をチェックするプログラムを作成しようとしています。正規表現の助けを借りて、私はいくつかのフィールドをチェックし、特定のフィールドが存在する場合、そのフィールドの出現数を数えるか、より深いスキャンを作成します。それはちょっと混乱していて、私は説明する方法を正確には知らない。同じインターフェイスではあるが同じではないオブジェクトを合計する

テキストファイルをチェックしていますが、複雑さを軽減するために、配列を使用します。

私は次の配列があります。

let strings = [ 
    'COMPANY: NAME ID: 12', 
    'COMPANY: NAME ID: 12', 
    'COMPANY: NAME ID: 12', 
    'COMPANY: NAME2 ID: 10' 
]; 

をし、これが所望の出力である:

[ 
    { 
    "NAME": { 
     "12": 3 
    } 
    }, 
    { 
    "NAME2": { 
     "10": 1 
    } 
    } 
] 

マイロジック:

'use strict'; 
 

 
let patterns = [ 
 
    { 
 
    'pattern': 'COMPANY:\\s*?([\\w]+)', 
 
    'modifier': '' 
 
    }, 
 
    { 
 
    'pattern': 'ID:\\s*?([\\d]+)', 
 
    'modifier': '' 
 
    } 
 
]; 
 

 
let strings = [ 
 
    'COMPANY: NAME ID: 12', 
 
    'COMPANY: NAME ID: 12', 
 
    'COMPANY: NAME ID: 12', 
 
    'COMPANY: NAME2 ID: 10' 
 
]; 
 

 
var SUPER = []; 
 
var _data = {}; 
 

 
for (let string of strings) { 
 

 
\t let i  = 0; 
 
\t let length = patterns.length 
 
    var root = _data; 
 

 
    for (i; i < length; i++) { 
 

 
    let item = patterns[i]; 
 

 
    let regex = new RegExp(item.pattern, item.modifier); 
 
    let result = regex.exec(string); 
 

 

 
    if (i < patterns.length -1) { 
 

 
    \t root = root[result[1]] = {}; 
 

 
    } else { 
 
     root = root[result[1]] = 1; 
 

 

 

 

 

 
     SUPER.push(_data); 
 
     _data = {}; 
 
    } 
 
    } 
 
} 
 

 

 
console.log(JSON.stringify(SUPER, null ,2));

今、私はオブジェクトがすでに存在するかどうかを確認する必要があるこのギャップがあります。もしそうなら、私は最後のアイテムを増やします。

アイデアや提案はありますか?

ありがとうございました。

答えて

0

どのようにこのような何かについては?

// This (big_hash) is where we will store the output 
// Sample output: 
// { 
// NAME: { 
//  "12": 3 
// }, 
// NAME2: { 
//  "10": 1 
// } 
// } 
let big_hash = {}; 

for (let string of strings){ 

    let pattern_matches = []; 

    for (let pattern of patterns){ 
    let regex = new RegExp(pattern.pattern, pattern.modifier); 
    pattern_matches[pattern_matches.length] = regex.exec(string); 
    } 

    // if all the patterns matched 
    if(pattern_matches.every(match => match)){ 
    // separate logic for the last match, because its value is not a hash 
    last_match = pattern_matches.pop(); 

    some_node = big_hash; 
    for(let match of pattern_matches){ 
     let key = match[1]; 
     some_node[ key ] = some_node[ key ] || {}; 
     some_node = some_node[ key ]; 
    } 

    // for the last level matching, the default value is 0, not {} 
    some_node[ last_match ] = some_node[ last_match ] || 0; 
    some_node[ last_match ] = some_node[ last_match ] + 1; 
    } 
} 
+0

機能的な例を提供できますか?これは実際には機能していません。 –

関連する問題