NodeJS差异Object.keys(数组).length和array.length

时间:2013-12-19 14:56:31

标签: javascript arrays node.js

我有一个从文件系统读取文件并将它们存储到数组中的函数。之后我想为该元素添加一个键/值对。但是,forEach循环没有被执行,因为显然没有元素。

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){...}。如果你有一个提示,这也很好。

我真的很感激这里有一些见解! : - )

1 个答案:

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