在函数中映射循环javascript不返回所需的值

时间:2017-03-10 09:02:14

标签: javascript

我有一个包含看起来像这样的对象的数组。

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

2 个答案:

答案 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... */;
}