2017-09-02 6 views
1

私はアレイマッチ同じ値の小数点数は、アレイにプッシュする

var QNo = ["1.1","1.2","1.3","2.1","2.2","3.1","3.2","3.3","4.1","4.2"]; 

この

var result = [["1.1","1.2","1.3"],["2.1","2.2"],["3.1","3.2","3.3"],["4.1","4.2"]]; 

ように一致小数でオブジェクトの配列でQNOを変更する必要が内部Srings私はこの種のコードを試しました

for (var j = 0; j < QNo.length ; j++) { 
    if (QNo[j].match(/.*(?=\.)/g)) { 
     result.push(QNo[j]); 
    } 
} 

マッチの後、私はあなたは(各項目は、そのオブジェクトに関連するkeyになりますobjectを使ってint型の値で配列し、それらをグループ内のすべての項目の上に行くためにキーをreduceを使用することができ、オブジェクト

+1

OK、あなたがこれまでに試してみましたでしょうか? – Dekel

+0

私はHVでマッチ(/.*(?=\.)/g)を試みて小数点を見つけました。 –

+0

正規表現だけでなく、あなたが書いたコードを追加してください。すべての値を調べるためにループを作成しましたか? – Dekel

答えて

1

として小数の値をプッシュするNYのアイデア)int型の値に基づいています。

var QNo = ["1.1","1.2","1.3","2.1","2.2","3.1","3.2","3.3","4.1","4.2"]; 
 
var reduced = QNo.reduce((res, item) => { 
 
    if (res.hasOwnProperty(parseInt(item))) { 
 
    res[parseInt(item)].push(item) 
 
    } else { 
 
    res[parseInt(item)] = [item] 
 
    } 
 
    return res; 
 
}, {}); 
 
console.log(reduced); 
 
console.log(Object.values(reduced));

1

あなたは分割さ値の左部分を取ることができるし、最後の値が同じグループ内にあるかどうかを確認 - その後に値をプッシュしますグループ。そうでない場合は、新しいグループを作成します。

var qNo = ["1.1", "1.2", "1.3", "2.1", "2.2", "3.1", "3.2", "3.3", "4.1", "4.2"], 
 
    result = qNo.reduce(function (r, a, i, aa) { 
 
     function left(a) { return (a || '').split('.')[0]; } 
 
     if (left(a) === left(aa[i - 1])) { 
 
      r[r.length - 1].push(a); 
 
     } else { 
 
      r.push([a]); 
 
     } 
 
     return r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ソートされていない値の場合、あなたはハッシュテーブルを使用し、後で結果を並べ替えることができます。

var qNo = ["1.1", "3.1", "1.2", "1.3", "2.1", "3.2", "3.3", "4.1", "2.2", "4.2"], 
 
    hash = Object.create(null), 
 
    result = qNo.reduce(function (r, a, i, aa) { 
 
     function left(a) { return (a || '').split('.')[0]; } 
 
     var key = left(a); 
 
     if (!hash[key]) { 
 
      hash[key] = []; 
 
      r.push(hash[key]); 
 
     } 
 
     hash[key].push(a); 
 
     return r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

解決策は、文字列がソートされている場合にのみ機能することに注意してください。それ以外の場合は機能しません。私はそれが問題ではなかったことを知っている(そして元の入力がソートされている)が、それに頼るのは良い習慣であるとは思えない – Dekel

関連する問題