typescript 如何比较2个数组并获得唯一值,以及如何在状态中设置该值

1wnzp6jl  于 2022-12-30  发布在  TypeScript
关注(0)|答案(3)|浏览(178)

我试图比较2个不同的API调用,从中我能够找出2个不同的ID数组,所以我试图过滤掉已经存在于array2中的ID,对于剩余的ID,我试图设置状态,有人能帮我吗?
目前代码:

const [ prevAdmins , setPrevAdmins ] = useState<any>([]);
    const [options, setOptions] = useState([{value: "", label: ""}]);

//API 1 CALL 
get_user_groups({bot_id:params.botid , group_id:params.userid}).then((res) => {
             setDetails(res?.data?.data[0]);
             setGroupName(res?.data?.data[0].name)
             let prevAdmins: any = [];
             res?.data?.data[0]?.join_details.map((prevJoinee , idx) => {
              prevAdmins.push(prevJoinee.user_id)
              setPrevAdmins(prevAdmins)
             })
           });

//OUTPUT FOR API 1 "prevAdmins": ['61dfcfb71f492f4f4f589e93', '61dedd23bd15322626dd7539']

//2nd API CALL : 
  get_followers({bot_id:params.botid}).then((res) => {
            if(res.data.data){
              let option: any = [];
              let allAdmins: any = [];
              res.data.data.map((admin, index) => {
                allAdmins.push(admin._id);
                if(!prevAdmins.includes(allAdmins)){
                  option.push({value: admin._id, label: admin.displayName})
                 }
                })
                setOptions(option);
            }
          })

//OUTPUT FOR API 2 : ['61dfd02a1f492f4f4f589f00', '61dfcfb71f492f4f4f589e93', '61dedd23bd15322626dd7539']

现在,我尝试排除已经存在于数组1中的id,并且setOptions应存储未排除的id。
问候!

9udxz4iz

9udxz4iz1#

使用spread运算符以避免重复

setOptions([...prevAdmins, ...option]);
r7xajy2e

r7xajy2e2#

如果你想从你的api调用中得到唯一的值,你可以使用Set代替数组.
请参考:https://www.javatpoint.com/typescript-set

jmo0nnb3

jmo0nnb33#

你可以使用扩展操作符来组合两个数组,然后将其转换为集合,并从该集合中创建一个数组。它将是唯一的。
大致上你可以做一些类似于这个方法的事情。

let array1 = [1,2,4]
let array2 = [4,3,5,6]

let combinedArray = [...array1, ...array2]
let arraySet = new Set(combinedArray)
let uniqueArray = Array.from(arraySet)
console.log(uniqueArray)

spread运算符将合并两个数组,但它也将具有重复值。当您将它转换为Set时,它将删除任何重复值。
然后,您可以简单地从该Set变量生成一个数组。
你也可以这样做来缩短它。

let uniqueArray = Array.from(new Set([...array1, ...array2]))

在你有了唯一的数组之后,你可以简单地用uniqueArray变量设置状态。
在您的情况下:
如果你得到这两个数组的话。

let arr1 = ['61dfcfb71f492f4f4f589e93', '61dedd23bd15322626dd7539']
let arr2 =['61dfd02a1f492f4f4f589f00', '61dfcfb71f492f4f4f589e93', '61dedd23bd15322626dd7539']

你可以做这样的事情

let uniqueArray = Array.from(new Set([...arr1, ...arr2]))
console.log(uniqueArray)

相关问题