0

私の目標は、以下のようなオブジェクトを持つことです:

var attrs = {
    price       : [0, 500000],
    housesize   : [0, 40],
    lotwidth    : [0, 30],
    storeys     : 'both',
    bedroom     : 0,
    bathroom    : 0
};

しかし、これをハードコーディングしたくなく、別のオブジェクトの要素から自動的に生成したいと考えています。オブジェクトは次のようになります。

var Defaults = {
      steps             : [10,3,3],                                 // steps for the slider to jump 
      filters           : {
        rangeFilter     : ['price',  'housesize', 'lotwidth'],      // list of slider inputs 
        radioFilter     : ['storeys'],                              // list of radio inputs 
        increamentFilter: ['bedroom', 'bathroom'],
      }
};

そのため、キーがオブジェクトのすべての値になるオブジェクトを構築しようとしていfiltersます。これを行う理由は、オブジェクトに何らかの値を追加すると、filtersオブジェクトにキーを作成する必要がなくなるためattrsです。オブジェクトのキーの数は、attrsオブジェクトの要素とまったく同じfiltersです。

どんな助けでも大歓迎です。乾杯。

==========================================

** * ** * **編集* ** * ** * *

現時点で思いついたのはこれ

var attrs = {};
for (var key in Defaults.filters) {
   var obj = Defaults.filters[key];
   for (var prop in obj) {
      attrs[obj[prop]] = 0; 
   }
}

しかし、現時点では、新しい要素のすべてのキーに 0 を追加しています。特定の値を動的に追加する方法を考え出す必要があります。範囲フィルター内の別のオブジェクトである可能性があります??

4

1 に答える 1

1

私はいつもそのようなタスクのためにこれを切り取って使用します:

function deepCopy(obj) {
if (Object.prototype.toString.call(obj) === '[object Array]') {
    var out = [], i = 0, len = obj.length;
    for ( ; i < len; i++ ) {
        out[i] = arguments.callee(obj[i]);
    }
    return out;
}
if (typeof obj === 'object') {
    var out = {}, i;
    for ( i in obj ) {
        out[i] = arguments.callee(obj[i]);
    }
    return out;
}
return obj;
}

から: http://snipplr.com/view/15407/

于 2012-10-08T06:44:02.460 に答える