使用来自另一个对象的所有元素填充JavaScript对象

时间:2012-10-08 06:36:33

标签: javascript jquery

我的目标是拥有如下对象:

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。我需要想出一种动态添加特定值的方法。可能是范围过滤器内的另一个对象??

1 个答案:

答案 0 :(得分: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/