2014-09-24 186 views
0

我有對象的數組(任意深度的)具有相同屬性:在對象的數組更改屬性

var array = [], 
    i; 

for(i = 0; i < 4; i++) { 
    array.push({ 
     'a': '0', 
     'b': { 
      'c': '0' 
     } 
    }); 
} 

我想的功能設置爲特定值的屬性在像這樣的所有對象:

// only to demonstrate, doesn't actually work! 
function set(array, attribute, value) { 
    array.forEach(function(obj) { 
     obj[attribute] = value; 
    }); 
} 

爲了能夠使用這樣的(或類似):

set(array, 'a', 1); 
set(array, 'b.c', 5); 

如果你無法理解我的問題,請幫我澄清一下。先謝謝你!

解決方案

我解決了它,但無法發佈一個答案所以在這裏,它是:

function set(array, attribute, value) { 
    // a.b.c => [a, b, c] 
    attribute = attribute.split('.'); 

    array.forEach(function(obj) { 
     // obj = array[index] 
     for (i = 0; i < attribute.length - 1; i++) { 
      // i = 0) obj = array[index].a 
      //  1) obj = array[index].a.b 
      obj = obj[attribute[i]]; 
     } 

     // array[index].a.b.c = value 
     obj[attribute[i]] = value; 
    }); 
} 
+0

那麼你面臨的問題是什麼? – mithunsatheesh 2014-09-24 17:14:57

+1

重複的http://stackoverflow.com/q/13719593/1529630 – Oriol 2014-09-24 18:02:02

+0

我無法發佈答案,所以我現在就把我的解決方案放在問題中。 – 2014-09-24 20:58:59

回答

0
var array = [], 
    i; 

for(i = 0; i < 4; i++) { 
    array.push({ 
     'a': '0', 
     'b': { 
      'c': '0' 
     } 
    }); 
} 

set = function(array, key, value){ 
    for (i = 0; i < array.length; i++){ 
    array[i][key] = value; 
    } 
} 

set(array, "test", "Test"); 
alert(array[0]['test']); 

哈,@Oriol是正確的,你只需要在你原來的語法錯誤功能可按。

+0

這對'b.c'不起作用 – Bergi 2014-09-24 18:07:07