typescript 在Angular中从一个JSON中过滤另一个JSON

ktca8awb  于 2023-05-19  发布在  TypeScript
关注(0)|答案(2)|浏览(142)

在Angular中,我有两个JSON,一个JSON(A)由整个车辆记录组成,而另一个JSON(B)由id组成。我只想返回JSON(A)中的匹配id记录。以下是详细信息

JSON(A)

{
         "id":100,
         "brand":"Tes1",
         "vname":"Testname1",
 },
 {
         "id":200,
         "brand":"Tes2",
         "vname":"Testname2",
 },
{
         "id":300,
         "brand":"Tes3",
         "vname":"Testname3",
 }

JSON(B)

{
         "id":100
 },
{
         "id":300
 },

通过(B)对(A)进行apply滤波后的预期输出

{
         "id":100,
         "brand":"Tes1",
         "vname":"Testname1",
 },
{
         "id":300,
         "brand":"Tes3",
         "vname":"Testname3",
 },
bksxznpy

bksxznpy1#

您可以将Array.prorotype.filter()Array.prototype.some()结合使用
验证码:

const jsonA = [{id: 100,brand: 'Tes1',vname: 'Testname1',},{id: 200,brand: 'Tes2',vname: 'Testname2',},{id: 300,brand: 'Tes3',vname: 'Testname3',},]

const jsonB = [
  {
    id: 100,
  },
  {
    id: 300,
  },
]

const filteredData = jsonA.filter((itemA) => jsonB.some((itemB) => itemB.id === itemA.id))

console.log(filteredData)
p3rjfoxz

p3rjfoxz2#

如果你关心性能,那么filtersome会影响你的应用,因为它包含嵌套循环。在这种情况下,您可以依靠查找

const jsonA = [{id: 100,brand: 'Tes1',vname: 'Testname1',}, {id: 200,brand: 'Tes2',vname: 'Testname2',}, {id: 300,brand: 'Tes3',vname: 'Testname3',}]

const jsonB = [{id: 100}, {id: 300}]

const map = new Map(jsonB.map(obj => [obj.id, obj]));
const intersection = jsonA.filter(obj => map.has(obj.id));

console.log(intersection);

相关问题