【问题标题】:NodeJS Difference Object.keys(array).length and array.lengthNodeJS 的区别 Object.keys(array).length 和 array.length
【发布时间】:2014-01-08 04:58:48
【问题描述】:

我有一个从文件系统读取文件并将它们存储到数组中的函数。之后我想向该元素添加一个键/值对。然而,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){...}。如果您对此有提示,这也很好。

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

【问题讨论】:

    标签: javascript arrays node.js


    【解决方案1】:

    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 循环 - 现在使用它并添加新的键/值对。
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多