首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数组中按值筛选对象

从数组中按值筛选对象
EN

Stack Overflow用户
提问于 2022-05-06 22:13:00
回答 3查看 56关注 0票数 0

我有一个对象b数组和一个数组a。我希望将b筛选为只有to值在a中的对象。我尝试过很多种方法,但我总是收到一个空数组。例如,最终结果将是一个数组,其中包含来自数组的第一个和第二个对象,而不是最后一个。

代码语言:javascript
运行
复制
const a = [
    "dfd302f4-571b-42da-9b35-07d1d9b6e68d",
    "d7099abd-6872-48db-bdd7-ca99e4513586",
    "93272093-5089-40cd-8c3d-2412377e1f32"
  ];

  const b = [
    {
      name: "toto",
      to: [
        "d7099abd-6872-48db-bdd7-ca99e4513586",
        "93272093-5089-40cd-8c3d-2412377e1f32"
      ]
    },
    { name: "tota", to: ["dfd302f4-571b-42da-9b35-07d1d9b6e68d"] },
    { name: "tota", to: ["8418v4rfe484evf48ez64vrfe6zv4r8ezvf4"] }
  ];

  console.log(b.filter(user => a.includes(user.to)))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-06 22:18:23

需要用数组检查数组(使用一些和包含)

代码语言:javascript
运行
复制
const a = [
  "dfd302f4-571b-42da-9b35-07d1d9b6e68d",
  "d7099abd-6872-48db-bdd7-ca99e4513586",
  "93272093-5089-40cd-8c3d-2412377e1f32",
];

const b = [
  {
    name: "toto",
    to: [
      "d7099abd-6872-48db-bdd7-ca99e4513586",
      "93272093-5089-40cd-8c3d-2412377e1f32",
    ],
  },
  { name: "tota", to: ["dfd302f4-571b-42da-9b35-07d1d9b6e68d"] },
  { name: "tota", to: ["8418v4rfe484evf48ez64vrfe6zv4r8ezvf4"] },
];

console.log(b.filter(({ to }) => to.some((item) => a.includes(item))));

票数 0
EN

Stack Overflow用户

发布于 2022-05-06 22:18:56

你的企图,

代码语言:javascript
运行
复制
console.log(b.filter(user => a.includes(user.to)))

无法工作,因为user.to是一个数组,而a不包含任何数组。

您需要使用every方法来检查to属性中的数组的所有元素是否都在a中。

代码语言:javascript
运行
复制
const a = [
    "dfd302f4-571b-42da-9b35-07d1d9b6e68d",
    "d7099abd-6872-48db-bdd7-ca99e4513586",
    "93272093-5089-40cd-8c3d-2412377e1f32"
  ];

const b = [
  {
    name: "toto",
    to: [
      "d7099abd-6872-48db-bdd7-ca99e4513586",
      "93272093-5089-40cd-8c3d-2412377e1f32"
    ]
  },
  { name: "tota", to: ["dfd302f4-571b-42da-9b35-07d1d9b6e68d"] },
  { name: "tota", to: ["8418v4rfe484evf48ez64vrfe6zv4r8ezvf4"] }
];

 console.log(b.filter(user => user.to.every(str => a.includes(str))));

编辑:您可以使用some而不是every,如@SivaKV的答案。这取决于您是否希望包含一个条目,其" to“数组在a中包含一些项,而有些项不包含(”每个“不包括这些项,但”一些“项),从您的问题中看并不清楚。

票数 0
EN

Stack Overflow用户

发布于 2022-05-06 22:21:59

您可以使用.some.every,这取决于.to属性的一个或所有元素必须在数组a中是否足够。

代码语言:javascript
运行
复制
const a = [
"dfd302f4-571b-42da-9b35-07d1d9b6e68d",
"d7099abd-6872-48db-bdd7-ca99e4513586",
"93272093-5089-40cd-8c3d-2412377e1f32"
  ];
const b = [
{
  name: "toto",
  to: [
    "d7099abd-6872-48db-bdd7-ca99e4513586",
    "93272093-5089-40cd-8c3d-2412377e1f32"
  ]
},
{ name: "tota", to: ["dfd302f4-571b-42da-9b35-07d1d9b6e68d"] },
{ name: "tota", to: ["8418v4rfe484evf48ez64vrfe6zv4r8ezvf4"] }
  ];

  console.log(b.filter(u => u.to.every(e=>a.includes(e))))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72147859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档