我有一个包含看起来像这样的对象的数组。
const arr = [
{
value: -1,
label: "None"
},
{
value: 24*60*60,
label: "24 hours"
},
{
value: 7*24*60*60,
label: "7 days"
},
{
value: 30*24*60*60,
label: "1 month"
},
{
value: 90*24*60*60,
label: "3 months"
}
];
我有以下功能'有点'可行,但它没有返回值。谁能发现我做错了什么?
以下是反应方法
class Test extends Component {
......
getLabelFromValue(arr, value) {
arr.forEach((item) => {
if(item.value === value) {
return item.label;
}
});
}
const value = getLabelFromValue(arr, 86400); //value is equal to undefined
答案 0 :(得分:2)
你从forEach
而不是外部函数返回:
getLabelFromValue(arr, value) {
let label;
let done = false;
arr.forEach(item => {
if(item.value === value && !done) {
label = item.label;
done = true;
}
});
return label;
}
const value = getLabelFromValue(arr, 86400); //value is equal to undefined
我个人只是使用过滤器。
arr.filter(item => item.value === value)[0]; // OR
arr.find(item => item.value === value);
答案 1 :(得分:2)
Callum Linington已经简要解释并解决了如何使用.forEach()
构造解决问题。
根据代码,getLabelFromValue
应仅返回单个值
因此我会使用Array
的另一种方法 - > Array.prototype.find
“find()
方法返回数组中第一个满足提供的测试函数的元素的值。否则返回undefined
。”
getLabelFromValue(arr, value) {
let item = arr.find(i => i.value === value);
return item ? item.label : undefined /* or any other default value... */;
}