Underscore.js基于属性名称数组的唯一选择

时间:2014-05-10 18:30:28

标签: javascript object underscore.js arrays

以下javascript旨在获取对象数组,在每个对象上搜索属性,由属性名称数组指定,并使用underscore.js从数组中选择在该方面唯一的项目。但是,出于某种原因,它返回的数组只包含一个对象:[{type:{sub:'a'}}]

有谁知道为什么? (如果您愿意,可使用Chrome版本34.0.1847.131 m。)

感谢。

var objectID = ["type", "sub"];

var getFromObjectID = function(obj) {
    var result = obj;
    for(var i = 0; i < objectID.length; i++) {
        if(!result.hasOwnProperty[objectID[i]])
            return null;
        result = result[objectID[i]];
    }
    return result;
}

var array = [
    {type: {sub: "a"}},
    {type: {sub: "a"}},
    {type: {sub: "b"}},
    {type: {sub: "c"}},
    {type: {sub: "b"}},
    {type: {sub: "a"}},
    {type: {sub: "b"}},
    {type: {sub: "c"}},
    {type: {sub: "a"}},
    {type: {sub: "b"}},
    {type: {sub: "b"}},
];

var uniqueArray = _.chain(array)
        .uniq(array, function(item, key) {
            return getFromObjectID(item);
        })
        .value();
console.log(uniqueArray);

1 个答案:

答案 0 :(得分:1)

一个错字!在进行hasOwnProperty检查时,您是否使用括号而不是括号。

if(!result.hasOwnProperty(objectID[i]))

另外,您在调用_uniq时无法添加数组,因为您已经链接了它:

 _.chain(array)
        .uniq(function(item, key) {
            return getFromObjectID(item);
        })