是否可以在JavaScript中以功能方式遍历对象?

时间:2009-12-23 18:17:11

标签: javascript functional-programming object

我认为JavaScript没有像 obj.first 这样的东西,但我想知道这样的事情是否能以任何方式实现:

var foobar = { aint: "foo", an: "bar", array: "foobar" };
var recursiveObjDump = function (obj, idx) {
    if (idx == obj.last.index) return obj[idx];
    else return obj[idx] + " " + recursiveObjDump(obj, obj[idx].next.index);
};

alert( recursiveObjDump(foobar, foobar.first.index) );

感谢。

3 个答案:

答案 0 :(得分:2)

不是真的。 Javascript中的对象是关联数组 - 键/值对的集合。没有指定的顺序,就像在mathematical set中一样(与sequence比较)。因此,寻找像object.first这样的东西是毫无意义的。

另一方面,你可以绝对强加自己的结构。例如,您可以在Javascript中实现Lisp样式列表,并重复这些列表。 This is a pretty neat article在Javascript中使用函数式编程技术。

最后,Javascript是面向对象的,而不是功能性的,所以你不会找到原生实现的那些功能原语。

编辑:如果您仍想在Javascript中使用函数式编程技术,请查看Functional Javascript

答案 1 :(得分:1)

您可以使用for in循环浏览所有属性。

这是一个基本的,您可以添加更好的检测来查找数组等。

var foobar = { aint: "foo", an: "bar", array: "foobar" };

function recusiveDump(obj) {
    var output = '';
    for(var i in obj) {
        if(obj.hasOwnProperty(i)) {
            if(typeof obj[i] == 'object') {
                output += recusiveDump(obj[i]);
            } else {
                output += obj[i];
            }
        }
    }
    return output;
}

alert(recusiveDump(foobar));

答案 2 :(得分:1)

如果您只想序列化对象,请使用JSON.stringify()。它在Javascript 5中是原生的,你可以从Crockford的网站下载一个脚本,用于更低版本的javascript。 (相同的脚本可以将JSON对象序列化安全地重新分解回javascript对象)