gpt4 book ai didi

javascript - 如何在函数参数中指定通用键约束

转载 作者:行者123 更新时间:2023-11-30 19:31:41 25 4
gpt4 key购买 nike

我可能会以错误的方式解决这个问题,我今天只是想在代码中找点乐子。我相信图书馆也已经这样做了。

我正在创建一个通用的 pushUnique 函数,用于确定推送到数组的新对象是否基于键是唯一的,如果是,则推送它。

到目前为止,我只有一些伪代码因为显而​​易见的原因而不起作用:

  pushUnique<T, U>(arr: T[], obj: T, key: U = null) {
if (key !== null) {
const index = arr.findIndex(o => o.key === obj.key);
}
}

如何获取键的对象名称并将其指定给 findIndex 函数?


编辑:

在 Titian Cernicova-Dragomir 的帮助下,这是我目前的最终解决方案,非常适合我的 POC 需求!

export class Utils {
pushUnique<T, U>(arr: T[], obj: T, key: (o: T) => U = null, logVerbose: boolean = false): void {
if (logVerbose === true) {
console.log('pushUnique called');
}

if (typeof obj === 'object' && key === null) {
console.warn('Object defined in pushUnique is complex, but a key was not specified.');
} else if (typeof obj !== 'object' && key !== null) {
console.warn('Object is not complex, but a key was specified');
}

const index = key !== null ? arr.findIndex(o => key(o) === key(obj)) : arr.indexOf(obj);
if (index === -1) {
arr.push(obj);
} else {
if (logVerbose === true) {
console.log('Duplicate object, not added');
}
}
}
}

最佳答案

您可以传入键入为 keyof T 的键,这意味着它必须是传入的任何 T 的键,然后您可以使用索引访问来获取值:

class Util {
pushUnique<T>(arr: T[], obj: T, key: keyof T) {
if (key !== null) {
const index = arr.findIndex(o => o[key] === obj[key]);
}
}
}

new Util().pushUnique([{a: 1}], {a :2 }, "a")
new Util().pushUnique([{a: 1}], {a :2 }, "b") //err

您也可以使用函数代替 keyof 但这是 JS/TS 的处理方式:

class Util {
pushUnique<T, U>(arr: T[], obj: T, key: (o: T) => U) {
if (key !== null) {
const index = arr.findIndex(o => key(o) === key(o));
}
}
}

new Util().pushUnique([{a: 1}], {a :2 }, o => o.a)
new Util().pushUnique([{a: 1}], {a :2 }, o => o.b) //err

关于javascript - 如何在函数参数中指定通用键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com