0

私が配列を持っているが、それぞれが独自のトークンに['dcab', 'feac', 'gwad', 'dnae']含まれるように配列を作成したいとします。どうすればいいですか?ありがとう!'a'['dc', 'a', 'b', 'fe', 'a', 'c', 'gw', 'a', 'd', 'dn', 'a', 'e'];

4

4 に答える 4

7
var x = ['dcab', 'feac', 'gwad', 'dnae'];
x = x.join('-').replace(/a/g,"-a-").split('-');

更新: @Robert が指摘したよう'a'に、先頭または末尾にある場合''、最終的な配列に空白文字列が表示されます。これを修正するには、次の手順を実行して空白文字列を削除します。

x.join('-').replace(/a/g,"-a-").split('-').filter(function(x) { return x!='' });

または、パフォーマンスが問題になる可能性のある大きな配列の場合は、別の方法を使用して余分な区切り文字を単純に取り除くことができます.replace()(これはおそらくより良い方法ですが、読みにくいです):

x.join('-').replace(/a/g,"-a-").replace(/^\-|\-(?=\-)|\-$/g,'').split('-');

もちろん、これが'-'どの文字列にも含まれないことを保証できれば、区切り文字は何でもかまいません (必ずしも である必要はありません)。

于 2012-08-10T22:41:08.480 に答える
4
var arr = ['dcab', 'feac', 'gwad', 'dnae'];
var result = [];
var i;
var s;

for (i = 0; i < arr.length; i++) {
    s = arr[i].split('a');
    result.push(s[0]);
    if (s.length > 1) {
        result.push('a');
        result.push(s[1]);
    }
}

各文字列に正確に1つまたはゼロの「a」文字が含まれている場合にのみ機能します。分割の結果がさらに含まれる可能性がある場合は、分割の結果を繰り返すことができます。

于 2012-08-10T22:36:43.933 に答える
3
var arr = ['dcab', 'feac', 'gwad', 'dnae'];

var new_arr = arr.reduce(function(ret, val) {
    ret.push.apply(ret, val.split(/(a)/))
    return ret;
}, []);

一部の古いブラウザでは、分割文字のキャプチャと保持がサポートされていないことに注意してください。


このようにもう少し簡潔に...

var new_arr = arr.reduce(function(ret, val) {
    return ret.concat(val.split(/(a)/));
}, []);
于 2012-08-10T22:38:23.270 に答える