【问题标题】:JavaScript Group and array of objects with an array of keys带有键数组的 JavaScript 组和对象数组
【发布时间】:2021-06-06 19:10:42
【问题描述】:

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

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 中关于 ids 的过滤器对数据进行分组的方法。 预期结果是

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 选项也是允许的

【问题讨论】:

  • 你尝试了什么,它到底有什么问题?
  • 为什么前 3 个使用 id 3 而其余的使用 id 5? ID和组有什么关系?
  • @jonrsharpe 我尝试输入我所做的。但它抱怨我的问题充满了代码

标签: javascript node.js typescript lodash


【解决方案1】:

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);

【讨论】:

    【解决方案2】:

    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 的对象。

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多