2013-12-19 54 views
4

我有一個從文件系統中讀取文件並將它們存儲到數組中的函數。之後我想向該元素添加一個鍵/值對。但是,forEach循環沒有執行,因爲顯然沒有元素。NodeJS差異Object.keys(array).length和array.length

readFilesFromDirectory(folder, elements, 'json', function(){ 
    log(Object.keys(elements).length,0); 
    log(elements.length,0); 
    elements.forEach(function(elem){ 
     elem["newKey"] = 1; 
    }); 
}); 

我的日誌包含下列行:

1 
0 

第一長度方法運行,第二個是沒有的。 我想知道我在做什麼錯誤的第二個功能,以及我如何解決它。

其實,我的主要目標是添加新的密鑰。但是,我不知道如何在我的代碼中使用一些Object.keyValues(elements).forEach(function(elem){...}。如果您有提示,這也會很好。

我真的很感謝這裏的一些見解!:-)

回答

4

Object.keys()方法返回給定對象自己可枚舉屬性的數組,其順序與for...in循環提供的順序相同(區別在於for-in循環枚舉原型鏈中的屬性)。

Object.keys返回一個數組,其元素是與直接在對象上找到的可枚舉屬性相對應的字符串。這些屬性的排序與通過手動循環對象的屬性給出的順序相同。

var arr = ["a", "b", "c"]; 
alert(Object.keys(arr)); // will alert "0,1,2" 

// array like object 
var obj = { 0 : "a", 1 : "b", 2 : "c"}; 
alert(Object.keys(obj)); // will alert "0,1,2" 

// array like object with random key ordering 
var an_obj = { 100: "a", 2: "b", 7: "c"}; 
alert(Object.keys(an_obj)); // will alert "2, 7, 100" 

// getFoo is property which isn't enumerable 
var my_obj = Object.create({}, { getFoo : { value : function() { return this.foo } }}); 
my_obj.foo = 1; 

alert(Object.keys(my_obj)); // will alert only foo 
+0

謝謝!我完全忘了for ... in循環 - 現在使用它並添加新的鍵/值對。 – user2083834