NodeJS中Object.keys(array).length和array.length的区别

4

我有一个函数,它从文件系统中读取文件并将它们存储到一个数组中。之后,我想向该元素添加键/值对。然而,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

第一个`length`方法是可行的,第二个则不行。 我想知道我在第二个函数中做错了什么,以及如何解决它。
实际上,我的主要目标是添加新的键。但是,我不知道如何在我的代码中使用一些`Object.keyValues(elements).forEach(function(elem){...}`。如果您对此有提示,那就太好了。
我真的很感激您在这里提供的见解! :-)
1个回答

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

谢谢!我完全忘记了for...in循环——现在正在使用它并添加新的键/值对。 - user2083834

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接