如何在打字稿中制作一组对象?

时间:2019-08-22 13:00:43

标签: javascript node.js typescript

我有一系列的人际关系(people1people2),我想让所有的人都处于这些关系中。 (p1p2的集合)

例如- 我有这个数组-

[
  {p1fName: 'J1', p1lName: 'J1', p2fName: 'J2', p2lName: 'J2'},
  {p1fName: 'J1', p1lName: 'J1', p2fName: 'J3', p2lName: 'J3'},
  {p1fName: 'J3', p1lName: 'J3', p2fName: 'J4', p2lName: 'J4'},
]

我希望结果是这样-

[
  {fname: 'J1', lname: 'J1'},
  {fname: 'J2', lname: 'J2'},
  {fname: 'J3', lname: 'J3'},
  {fname: 'J4', lname: 'J4'}
]

每个people的标识符是fNamelName的组合。

现在我将字符串(${fname}_${lname})映射到我想返回的对象(peopleId),并以此方式保持唯一性。

您是否知道如何使用Set来做到这一点?

谢谢

1 个答案:

答案 0 :(得分:0)

尝试一下:

const x =[ {p1fName: 'J1', p1lName: 'J1', p2fName: 'J2', p2lName: 'J2'},
  {p1fName: 'J1', p1lName: 'J1', p2fName: 'J3', p2lName: 'J3'},
  {p1fName: 'J3', p1lName: 'J3', p2fName: 'J4', p2lName: 'J4'}
  ]
  
  const transform = data => {
    const [d1,d2] = x.flatMap(({p1fName, p1lName, p2fName, p2lName})=> ([
      {fname: p1fName, lname: p1lName},
      {fname: p2fName, lname: p2lName}
    ]))
    .reduce(([r1,r2],{fname, lname})=>{
      const key = `${fname}_${lname}`
      if (!r1.has(key)) {
        r1.add(key)
        r2.push({fname, lname})
      }
      return [r1,r2]
    }, [new Set(), []])
    return d2
  }
  
  console.log(transform(x))

首先,您要在找到唯一的{fname,lname}集之前将数组(输入)展平为{fname,lname}