【问题标题】:Best way to query back unique attribute values in a javascript array of objects?在javascript对象数组中查询唯一属性值的最佳方法?
【发布时间】:2010-10-10 03:57:47
【问题描述】:

在以下示例数组中找到“foo”的所有可能值的最佳(或最快)方法是什么。

var table = [
    {foo: 0, bar:"htns", stuff:123},
    {foo: 2, bar:"snhn", stuff:156},
    {foo: 5, bar:"trltw", stuff:45},
    {foo: 5, bar:"lrctm", stuff:564},
    //few thousand lines later
    {foo: 2596, bar:"cns", stuff:321},
    {foo: 2597, bar:"gcrl", stuff:741}
];

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    遍历数组并将值放入哈希(对象)中。这是一个 O(n) 算法。

    var result = {};
    for(var i=0; i<table.length; i++) {
        result[table[i].foo] = 1; //the value can be anything
    }
    
    //now read back the unique values
    for (i in result) {
        if (result.hasOwnProperty(i)) { 
            console.log(i);
        }
    }
    

    【讨论】:

    • 请注意,该算法不会区分具有相同字符串表示形式的值,例如 5 和 '5'
    【解决方案2】:

    这是 Chetan 答案的类型安全版本:

    var result = {};
    for(var i = 0; i < table.length; ++i) {
        var value = table[i].foo;
        result[(typeof value) + ' ' + value] = value;
    }
    
    for(id in result) {
        if(result.hasOwnProperty(id)) { 
            console.log(result[id]);
        }
    }
    

    但它仍然会中断对象:只要 toString() 方法没有被覆盖,它们都共享字符串表示 '[object Object]'

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多