JavaScript 具有键数组的对象组和数组

JavaScript Group and array of objects with an array of keys

我有这段代码,目前正在使用打字稿,但现在没关系。我只需要一个工作代码。

const ids = [3, 5];

const data = [
  {
    user: 'faith',
    nums: [1, 2, 3, 4]
  },
  {
    user: 'ngozi',
    nums: [4,7,2,45,6]
  },
  {
    user: 'chioma',
    nums: [2,3,5,7]
  },
  {
    user: 'peter',
    nums: [1,5,7,9]
  },
  {
    user: 'goodnews',
    nums: [2,4,8,0]
  },
  {
    user: 'peter',
    nums: [1,3,5,7]
  }
];

正在寻找一种方法,使用 nums 中关于 id 的过滤器对数据进行分组。 预期结果是

const result = {
  3: [
    {
      user: 'faith',
      nums: [1, 2, 3, 4]
    },
    {
      user: 'chioma',
      nums: [2,3,5,7]
    },
    {
      user: 'peter',
      nums: [1,3,5,7]
    }
  ],
  5: [
    {
      user: 'chioma',
      nums: [2,3,5,7]
    },
    {
      user: 'peter',
      nums: [1,5,7,9]
    },
    {
      user: 'peter',
      nums: [1,3,5,7]
    }
  ]
}

lodash 选项也是允许的

const ids = [3, 5];
const data = [{
    user: 'faith',
    nums: [1, 2, 3, 4]
  },
  {
    user: 'ngozi',
    nums: [4, 7, 2, 45, 6]
  },
  {
    user: 'chioma',
    nums: [2, 3, 5, 7]
  },
  {
    user: 'peter',
    nums: [1, 5, 7, 9]
  },
  {
    user: 'goodnews',
    nums: [2, 4, 8, 0]
  },
  {
    user: 'peter',
    nums: [1, 3, 5, 7]
  }
];

const result = {};

// Using a forEach loop to go through the arrays
data.forEach(item => {
  ids.forEach(id => {
    if (item.nums.includes(id)) {
      if (!result[id]) result[id] = [];

      result[id].push(item);
    }
  });
});

console.log(result);

const ids = [3, 5];

const data = [{
    user: 'faith',
    nums: [1, 2, 3, 4]
  },
  {
    user: 'ngozi',
    nums: [4, 7, 2, 45, 6]
  },
  {
    user: 'chioma',
    nums: [2, 3, 5, 7]
  },
  {
    user: 'peter',
    nums: [1, 5, 7, 9]
  },
  {
    user: 'goodnews',
    nums: [2, 4, 8, 0]
  },
  {
    user: 'peter',
    nums: [1, 3, 5, 7]
  }
];

let result = {};
ids.map((num) => {
  let filteredRes = data.filter((x) => {
    if (x.nums.indexOf(num) > -1) {
      return x
    }
  });
  result[num] = filteredRes
});

console.log(result);

您可以尝试映射 ID,然后过滤数据数组以获取具有该 ID 的对象。