我有一个包含对象的3D数组:
[
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
]
如何将其展平,包括删除重复的
id
参数?[{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }]
我认为使用下划线可能会对此有所帮助。
我有一个包含对象的3D数组:
[
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
]
id
参数?[{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }]
var a = [
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
];
var flattened = _(a).flatten().uniq('id').value();
当然,您需要将lodash包含在您的网页中。
chain
和 value
是一个不错的选择。var data = [
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
];
var result = _.chain(data)
.flatten()
.uniq(function(o) {
return o.id;
})
.value();
console.log('result', result);
.uniq('id')
,使其更加简短:var result = _.chain(data)
.flatten()
.uniq('id')
.value();
.uniq('id')
- Gruff Bunny.uniq('id')
是可以工作的,但在我在JSFiddle上使用的旧版本(1.5)中不行。 - Cymen你不需要任何库来完成这个,它非常简单:
function flatten(arr)
{
var map = {};
var flatArray = [];
function pushToMap(o) {
if(map[o.id])
return;
map[o.id] = true;
flatArray.push(o);
}
function arrRecurse(a) {
if(a.length === undefined)
pushToMap(a);
else {
a.forEach(function(i) {
arrRecurse(i);
});
}
}
arrRecurse(arr);
return flatArray;
}
var _3dArray = [
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
];
alert(JSON.stringify(flatten(_3dArray)));
if (typeof a === 'undefined') {...}
。if (a === undefined)
将抛出异常。 - itachiundefined
,你是错的。a.length
不会抛出异常 - 不需要使用typeof
。 - Amitvar ar = [
[{ id: 1 }, { id: 2 }],
[{ id: 3 }],
[{ id: 3 }, { id: 4 }]
];
//start
var output = [];
for (var x = 0, al = {}; x < ar.length; x++)
for (var y = 0, t = ar[x][y]; y < ar[x].length; y++, t = ar[x][y])
al[t.id] = (!al[t.id]) ? output.push(t) : 1;
//end
document.body.innerHTML += JSON.stringify(output);
uniq
中有获取属性的快捷方式! - Cymen