2012-10-08 159 views
0

我的目標是有一個對象如下圖所示:填充JavaScript對象與另一個對象的所有元素

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

遍歷Defaults.filters'的'的屬性和迭代的每個值(陣列)。然後將數組中的每個值添加到對象。請參閱https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for...in和https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects 。 –

回答

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/