我的目标是拥有如下对象:
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。我需要想出一种动态添加特定值的方法。可能是范围过滤器内的另一个对象??
答案 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;
}