首页 > 解决方案 > 从具有特定 ID 的对象的数组生成新数组

问题描述

我们在我们的项目中使用 ramda,我确实有这个数据结构,我需要做以下事情:

对于每个集合,检查它们submittedCheckboxes是否在其中并将它们隔离到新数组中,这样我就可以知道valid_amount设置为的复选框的数量true是否未超过。

在下面的示例中,它应该抛出指示集合#1 的 id 的错误,因为这两个submittedCheckboxes具有value: true集合指定的位置valid_amount: [1],但集合 #2 应该没问题,因为 valid_amount 选项是 1 或 2,( valid_amount: [1,2])。最后一组应该接受属于它的每一个选中的复选框。

const sets = [
  {id: 1, checkboxes: [{id: 10}, {id: 20}], valid_amount: [1]},
  {id: 2, checkboxes: [{id: 30}, {id: 40}], valid_amount: [1,2]},
  {id: 3, checkboxes: [{id: 50}, {id: 60}, {id: 70}, {id: 80}], valid_amount: [1,2,3,4]},
];

const submittedCheckboxes = [
  {id: 10, value: true},
  {id: 20, value: true},
  {id: 30, value: true},
  {id: 40, value: true},
  {id: 50, value: true},
  {id: 60, value: false},
  {id: 70, value: true},
  {id: 80, value: false},
];

标签: javascriptarraysobjectramda.js

解决方案


const sets = [
	{id: 1, checkboxes: [{id: 10}, {id: 20}], valid_amount: [1]},
	{id: 2, checkboxes: [{id: 30}, {id: 40}], valid_amount: [1,2]},
	{id: 3, checkboxes: [{id: 50}, {id: 60}, {id: 70}, {id: 80}], valid_amount: [1,2,3,4]},
];

const submittedCheckboxes = [
	{id: 10, value: true},
	{id: 20, value: true},
	{id: 30, value: true},
	{id: 40, value: true},
	{id: 50, value: true},
	{id: 60, value: false},
	{id: 70, value: true},
	{id: 80, value: false},
];
console.log(sets.map(valid));

function valid(set) {
	return set.valid_amount.includes(set.checkboxes.filter(checkbox => submittedCheckboxes.find(set=>set.id === checkbox.id).value).length)
}


推荐阅读