首页 > 解决方案 > 按子对象中的键和/或值过滤对象数组

问题描述

假设我有一组看起来像这样的用户:

[
    {
        "id": 1,
        "name": "Melody Adam",
        "interests": {
            "hockey": "somewhat",
            "football": "yes"
        }
    },
    {
        "id": 2,
        "name": "Antonio Rutledge",
        "interests": {
            "football": "somewhat",
            "curling": "no",
            "polevaulting": "somewhat"
        }
    },
]

我将如何通过interests对象中的内容过滤这个数组,例如值是"somewhat"什么时候或者键是什么时候"football"?我正在尝试围绕 Array.prototype.filter 和 Array.prototype.reduce 进行思考,但仍然不太明白。我知道我可以使用类似users.filter(({ name }) => name === "Melody Adam")基于对象“顶层”的东西进行过滤的东西,但在“更深”一步时不能保持数组完整(如果有任何更好/正确的术语,请让我知道)。

标签: javascriptarraysobjectecmascript-6

解决方案


var testarr = [
  {
    "id": 1,
    "name": "Melody Adam",
    "interests": {
      "hockey": "somewhat",
      "football": "yes"
    }
  },
  {
    "id": 2,
    "name": "Antonio Rutledge",
    "interests": {
      "football": "somewhat",
      "curling": "no",
      "polevaulting": "somewhat"
    }
  },
];

var search = "somewhat";
var selectedItems = [];
jQuery.each(testarr, function (i, item) {
  if (item && search && item.interests && item.interests.football) {
    var value = item.interests.football.trim().toLowerCase();
    if (search === value) {
      selectedItems.push(item);
    }
  }
});

推荐阅读