下面的代码可以迭代来自对象的贴纸信息。为此,我对每个都使用两个嵌套的。在提交中是否有更好的方法来重构下面的代码而不使用嵌套的forEach或任何更好的建议。
var stickers = [];
_.forEach(data.families.categories, function (category) {
_.forEach(category.stickers, function (sticker) {
stickers.push(sticker);
});
});下面是对象示例
var data = {
"families": {
"id": "my_family",
"categories": [
{
"label": "sample-1",
"id": "family-0",
"stickers": [
"aa",
"bb",
"cc"
]
},
{
"label": "US",
"id": "family-1",
"stickers": [
"DD",
"EE"
]
},
{
"label": "sample-2",
"id": "family-2",
"stickers": [
]
},
{
"label": "sample-3",
"id": "family-3",
"stickers": [
"FF",
"GG",
"HH",
"II",
"JJ"
]
}
]
}
}发布于 2016-10-12 11:29:09
Lodash提供了flatMap函数,它可以做您想做的事情:
var stickers =_.flatMap(data.families.categories, 'stickers');
var data = {
"families": {
"id": "my_family",
"categories": [
{
"label": "sample-1",
"id": "family-0",
"stickers": [
"aa",
"bb",
"cc"
]
},
{
"label": "US",
"id": "family-1",
"stickers": [
"DD",
"EE"
]
},
{
"label": "sample-2",
"id": "family-2",
"stickers": [
]
},
{
"label": "sample-3",
"id": "family-3",
"stickers": [
"FF",
"GG",
"HH",
"II",
"JJ"
]
}
]
}
}
var stickers =_.flatMap( data.families.categories, 'stickers');
document.getElementById('result').textContent = JSON.stringify(stickers);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
<p>
<pre id="result"></pre>
</p>
发布于 2016-10-12 10:58:10
您可以结合使用Array#reduce和Array#concat。
var data = { "families": { "id": "my_family", "categories": [{ "label": "sample-1", "id": "family-0", "stickers": ["aa", "bb", "cc"] }, { "label": "US", "id": "family-1", "stickers": ["DD", "EE"] }, { "label": "sample-2", "id": "family-2", "stickers": [] }, { "label": "sample-3", "id": "family-3", "stickers": ["FF", "GG", "HH", "II", "JJ"] }] } },
stickers = data.families.categories.reduce(function (r, category) {
return r.concat(category.stickers);
}, []);
console.log(stickers);
https://stackoverflow.com/questions/39996748
复制相似问题