0

件名の Python イディオム

set('pdf ppt tif tiff jpg jpeg'.split())

文字列のセットを作成するかなりコンパクトな方法を示します。1 JavaScriptでセットを作成するための、同様にコンパクトなイディオムを 探しています。(注:文字列のリストを作成するだけには興味がありません。)

JS のセットに対する標準的なアプローチはオブジェクトを使用することだと理解しています (キーはセット要素であり、値は重要ではありません)。

FWIW、私が探しているイディオムはブックマークレットを対象としています(したがって、簡潔さが強調されています)。

ありがとう!

1  Python に慣れていない方のために説明すると、内部式は、呼び出し文字列オブジェクトを空白で分割することによって得られる文字列のリストに評価されます。このリストは、setコンストラクタへの引数です。

編集:文字列のリストではなく、セット(つまりobject )を探していることを強調しました。

4

2 に答える 2

5

JavaScriptにはset型がありませんが、文字列(または)から簡単に作成するにはヘルパー関数が必要ですArray

.set()これは、文字列を呼び出して、文字列からの項目をある値にマッピングするオブジェクトを取得できるようなヘルパー関数です(true何も指定されていない場合)。

String.prototype.set = function(val) {
    var items = this.split(' '),
        len = items.length,
        obj = {},
        i;
    for(i = 0; i < len; i++) {
        obj[items[i]] = val === undefined ? true : val;
    }
    return obj;
};

デモ:

> 'pdf ppt tif tiff jpg jpeg'.set()
{ pdf: true,
  ppt: true,
  tif: true,
  tiff: true,
  jpg: true,
  jpeg: true }

簡潔なものを好むので、単一の文字列に対してのみ必要な場合、これは解決策になる可能性があります。

var set = (function(s){ var obj = {}; for(var i = 0, elems = s.split(' '), l = elems.length; i < l; i++) obj[elems[i]] = 1; return obj; })('pdf ppt tif tiff jpg jpeg');

その場合は、オブジェクトリテラルを使用することを検討しますが、要素が大量にない限り、これがおそらく最短の解決策です。

于 2012-05-14T00:14:42.117 に答える
1

ECMAScript 第 5 版には次の機能がありますArray.reduce

'pdf ppt tif tiff jpg jpeg'.split(' ').reduce(function(d,v){
    return d[v] = true,d
}, {});

Object
jpeg: true
jpg: true
pdf: true
ppt: true
tif: true
tiff: true
__proto__: Object
于 2012-05-14T00:22:04.533 に答える