我有这个数组或ITest对象:
var x: ITest[] =
[{"adminTestId":131,"code":"abcde","userTestId":1},
{"adminTestId":130,"code":"ddddd","userTestId":2}]
我创建了一个函数,我可以用它来获取一个对象,给定userTestId:
elem = (arr, property, num) => {
arr.forEach(function (elem, index) {
if (elem[property] === num)
return elem;
})
};
当我这样称呼时,我收到错误:
var test: ITest = <ITest> this.elem(this.tests, 'userTestId', userTestId);
Error 5 Cannot convert 'void' to 'ITest'.
有人可以解释我做错了什么。在这种情况下,我想键入this.elem的输出为ITest类型。
答案 0 :(得分:3)
这里有一些问题:你不能短路forEach而且forEach中的elem var在循环之外是不可评估的。
以下是一个解决方案:
elem = (arr : any[], property, num) => {
var found = null;
arr.forEach(function (elem, index) {
if (elem[property] === num) {
found = elem;
}
})
return found;
};
您可以将其缩短为:
var foundItems = arr.filter((item) => item[property] === num);
return foundItems.length === 1 ? foundItems[0] : null;
或者你也可以使用像lodash这样的东西:
_.find(arr, (item) => item[property] === num);