我一直在尝试过滤对象数组一段时间,但是似乎无法真正抓住它。尽管我通常最后都会有工作代码,但是对我来说,它看起来并不像是优雅的代码。因此,我非常感谢代码审查和一些提示!
示例:我目前正在为一家网上商店使用此示例,我需要根据ID从一系列对象中检索产品详细信息。
这是我的辅助函数:
function getItemDetails(id) {
var getCategory = shelf.filter(obj => obj.articleList.some(cat => cat.id === id));
var getArticleList = getCategory[0].articleList;
var getItem = getArticleList.filter(item => item.id == id);
return getItem
}
步骤:第一步,我尝试过滤shelf
数组,但是它将返回articleList
对应项的整个数组。
因此,我再次使用相同的条件对结果进行了过滤,并且可以正常工作,但对我来说却显得非常多余。
这是数据示例:
const shelf = [{
"categoryPrice": "2",
"categoryTitle": "Flyer",
"articleList": [{
"id": "1",
"articleTitle": "Green",
}, {
"id": "2",
"articleTitle": "Blue",
}],
}, {
"categoryPrice": "3",
"categoryTitle": "Post card",
"articleList": [{
"id": "3",
"articleTitle": "Purple"
}, {
"id": "4",
"articleTitle": "Yellow",
}]
}]
我在这里检查了各种问题,包括:
但我认为,它们都不提供更简单,更简洁的解决方案。我想念什么?
谢谢你的帮助!
这可能更适合进行代码审查,但是如果问题只是“如何使其更加简洁”,我建议采取以下措施:
const shelf = [{
"categoryPrice": "2",
"categoryTitle": "Flyer",
"articleList": [{
"id": "1",
"articleTitle": "Green",
}, {
"id": "2",
"articleTitle": "Blue",
}],
}, {
"categoryPrice": "3",
"categoryTitle": "Post card",
"articleList": [{
"id": "3",
"articleTitle": "Purple"
}, {
"id": "4",
"articleTitle": "Yellow",
}]
}]
const findItem = function(shelves, id) {
return shelves.flatMap((shelf) => shelf.articleList).find((article) => article.id == id) || null;
}
console.log(findItem(shelf, 1));
console.log(findItem(shelf, 3));
上面的示例连接了所有文章列表,然后在该数组中搜索具有提供的ID的文章。
性能明智?不是最好的,但是您要求的是简洁的东西,这与给定的数据结构所希望的一样简洁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句