Javascript 从列表键中提取值
我想返回公司角色的分配学分,其值与此处匹配。但是返回的值是:Javascript 从列表键中提取值,javascript,arrays,reactjs,hashmap,Javascript,Arrays,Reactjs,Hashmap,我想返回公司角色的分配学分,其值与此处匹配。但是返回的值是:[undefined,undefined,undefined,“10000.0”] 在这种情况下,未定义的值是因为公司角色的值不匹配。我可以删除所有未定义的值,然后只使用值10000.0,但是有更优雅的方法吗 编辑:if(cr.id==id)条件仅对单个值始终为真。编辑:仅尝试 getEmployeeCredits(id) { if (this.state.company_roles) { re
[undefined,undefined,undefined,“10000.0”]
在这种情况下,未定义的值是因为公司角色的值不匹配。我可以删除所有未定义的值,然后只使用值10000.0
,但是有更优雅的方法吗
编辑:if(cr.id==id)
条件仅对单个值始终为真。编辑:仅尝试
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.map(function (cr, i) {
if (cr.id === id) {
return cr.assigned_credits
}
}.bind(this));
}
}
获取数组后,可以使用array.prototype.filter
例如:
编辑:只是尝试
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.map(function (cr, i) {
if (cr.id === id) {
return cr.assigned_credits
}
}.bind(this));
}
}
获取数组后,可以使用array.prototype.filter
例如:
为什么不直接在公司角色上使用
过滤器
var data = [42, 21, undefined, 50, 40, undefined, 9];
data = data.filter(function( element ) {
return element !== undefined;
});
为什么不直接在公司角色上使用
过滤器
var data = [42, 21, undefined, 50, 40, undefined, 9];
data = data.filter(function( element ) {
return element !== undefined;
});
如果要查找数组中的单个值,请使用
array.prototype.find
根据您的示例进行调整:
const foundCompanyRoleItem=this.state.company\u roles.find(crItem=>crItem.id==id);
返回foundCompanyRoleItem.assigned_学分代码>
这将始终返回一个匹配值,而不是像.filter
那样返回一个数组
注:我建议您的项目也使用ES6语法。在上面的示例中,您可以看到好处,因为我的示例使用了ES6中引入的箭头函数。它使表达式更简洁、更合理。如果要查找数组中的单个值,请使用array.prototype.find
根据您的示例进行调整:
const foundCompanyRoleItem=this.state.company\u roles.find(crItem=>crItem.id==id);
返回foundCompanyRoleItem.assigned_学分代码>
这将始终返回一个匹配值,而不是像.filter
那样返回一个数组
注:我建议您的项目也使用ES6语法。在上面的示例中,您可以看到好处,因为我的示例使用了ES6中引入的箭头函数。它使表达式更简洁、更合理。这是因为if语句只对一个值为true,其余的则隐式返回未定义的值
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.filter(cr => cr.id === id);
}
}
所以要解决这个问题,你需要
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.map(function (cr, i) {
if (cr.id === id) {
return cr.assigned_credits
}
else
return undefined;
}.bind(this));
}
}
这是因为if语句只对一个值为true,其余的则隐式返回undefined
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.filter(cr => cr.id === id);
}
}
所以要解决这个问题,你需要
getEmployeeCredits(id) {
if (this.state.company_roles) {
return this.state.company_roles.map(function (cr, i) {
if (cr.id === id) {
return cr.assigned_credits
}
else
return undefined;
}.bind(this));
}
}
Array.map
将一个数组中的所有值转换为另一个数组,两个数组的长度始终相同。如果您想像上面提到的那样从数组中提取单个对象,array.filter
或array.find
会更好。请记住,Array.find
是ES6标准的一部分,这意味着某些浏览器可能不支持它。Array.map
将一个数组中的所有值转换为另一个数组,并且两个数组的长度始终相同。如果您想像上面提到的那样从数组中提取单个对象,array.filter
或array.find
会更好。请记住,Array.find
是ES6标准的一部分,这意味着某些浏览器可能不支持它。没错,我可以从返回的cr.assigned\u credits
中删除未定义的值。我想知道如果if条件为真,是否有办法只返回assigned_credits
的值,然后它只返回单个值而不是arraySure!让我试试。没错,我可以从返回的cr.assigned\u credits
中删除未定义的值。我想知道如果if条件为真,是否有办法只返回assigned_credits
的值,然后它只返回单个值而不是arraySure!让我试试。这似乎是实现我想要的最干净的方法。谢谢,我将研究在我的项目中使用ES6语法。这似乎是实现我想要的最干净的方式。谢谢,我将研究在我的项目中使用ES6语法。看起来确实干净多了