代码审查:使用Javascript简洁地对对象进行深层过滤

沃尔夫冈·沃尔文德

我一直在尝试过滤对象数组一段时间,但是似乎无法真正抓住它。尽管我通常最后都会有工作代码,但是对我来说,它看起来并不像是优雅的代码。因此,我非常感谢代码审查和一些提示!

示例:我目前正在为一家网上商店使用此示例,我需要根据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",
    }]
}]

我在这里检查了各种问题,包括:

但我认为,它们都不提供更简单,更简洁的解决方案。我想念什么?

谢谢你的帮助!

吉姆·尼尔森(Jim Nilsson)

这可能更适合进行代码审查,但是如果问题只是“如何使其更加简洁”,我建议采取以下措施:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Javascript对对象进行深度过滤

使用System.Reflection对对象进行深层复制?

使用 JavaScript 对对象数组进行排序

如何使用jQuery或JavaScript对对象数组进行排序

使用 JavaScript 对对象进行排序和数组

在 JavaScript 中使用键对对象数组进行排序

如何通过基于特定字段值对对象进行分组来过滤 javascript 对象数组?

使用 VanillaJS 对对象进行分组和过滤以及对象数组

使用RegExp用管道对对象进行Angular2过滤的对象数组?

用lodash(或香草javascript)对对象数组进行排序和过滤

按对象对对象数组进行角度过滤

在javascript中对对象数组进行分组

在javascript中对对象数组进行排序

使用 AlphaNumeric 对对象数组进行排序

使用键对对象进行排序 (JS)

使用compareTo()对对象数组进行排序

使用 sorted 对对象列表进行排序

AngularJS:对对象部分进行计数和过滤

过滤然后按日期对对象数组进行排序

如何提供使用TortoiseSVN进行代码审查的功能?

在Visual Studio 2015中使用Git进行代码审查

如何在javascript中对对象数组使用过滤器

为什么以下代码对对象列表进行排序?

为什么集合不能使用时间戳正确地对对象进行排序?

Javascript:按给定键值的子对象对对象进行排序

按javascript对象中键的值对对象进行分组

在javascript中对对象的对象数组进行排序

在JavaScript中按对象对对象进行排序

如何使用 lodash javascript 对对象中的数组数据进行分组