以下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);
答案 0 :(得分:1)
hasOwnProperty
检查时,您是否使用括号而不是括号。
if(!result.hasOwnProperty(objectID[i]))
另外,您在调用_uniq
时无法添加数组,因为您已经链接了它:
_.chain(array)
.uniq(function(item, key) {
return getFromObjectID(item);
})