我正在尝试使用values
方法从基于数组的对象 lodash.find
集合中查找项目,但我得到的返回值是“未定义”。以下是我在 typescript
:
this.toFilterId = 2;
this.values = [];
//valueModel is a class with properties - id, code and description and I cant change its definition
export class valueModel {
constructor(
public id: number,
public code: string,
public description: string
) { }
}
this.values.push(new valueModel(-1, 'TestAll', 'TestAllDesc'));
this.values.push(new valueModel(1, 'Test1', 'Test1Desc'));
this.values.push(new valueModel(2, 'Test2', 'Test2Desc'));
this.values.push(new valueModel(3, 'Test3', 'Test3Desc'));
const selectedValue = lodash.find(this.values, (filterItem: valueModel) => {
return filterItem.id === this.toFilterId;
});
//below console prints undefined instead of the valueModel object with id of 2
console.log('selectedValue:', selectedValue);
我不确定为什么 selectedValue
var的控制台日志上面打印'undefined'。我在SO
lodash.find()
方法中提到了lodash文档和其他类似问题,但它没有返回正确的值。
有人可以帮助我找出使用lodash.find()
方法的错误吗?
答案 0 :(得分:1)
除了回调中的:valueModel
之外,您的解决方案看起来很好。
删除它,除非您使用的是flow或TypeScript(问题中没有指出)。
编辑更新的问题提到这是打字稿。无论如何,您的解决方案有效:
https://codepen.io/anon/pen/VxZPEb?editors=0011
这里唯一的例外或差异是:
a)您实现的valueModel。双重和三重检查您可以通过model.id访问id。
b)你没有正确导入lodash - console.log(lodash)来仔细检查它是不是未定义。
答案 1 :(得分:1)
问题是回调函数中的this
引用了Window。试试这个:
const selectedValue = lodash.find(this.values, ((filterItem: valueModel) => {
return filterItem.id === this.toFilterId;
}).bind(this));
或
const self = this;
const selectedValue = lodash.find(this.values, (filterItem: valueModel) => {
return filterItem.id === self.toFilterId;
});
显然,TypeScript和JavaScript在lambdas中处理this
的方式有所不同。