首页 > 解决方案 > react js如何获取最小值

问题描述

在下面的代码中,我尝试{this.renderCost(data,'mina')}使用 react js 运行。我想获得total使用下面代码的最小值,但是total一个对象的值name等于例如 mina(或其他名称,因为它将被更改)。我尝试了以下方法:首先推送totalusing的值indents.push(elem.total),该部分的预期输出为[2000,1000],然后通过 获取数组的最小值Math.min(...indents),该部分的预期输出为,[1000] 但该功能不起作用。

const data = [
    {
        "obj": {
            "no": "1",
            "info": [
                {
                    "name": "maya"
                },
                {
                    "name": "mina"
                }
            ],
            "total":"2000"
        }
    },
    {
        "obj": {
            "no": "2",
            "info": [

                {
                    "name": "maya"
                }
            ],
            "total":"1000"
        }
    },
    {
        "obj": {
            "no": "3",
            "info": [
                {
                    "name": "mina"
                },
                {
                    "name": "Mike"
                }
            ],
            "total":"1000"
        }
    }
]
renderCost(data,name){
    let indents = [];
    data.map((elem) => {
         this.renderTotal(elem,name,indents)
        })
    }
renderTotal(elem,name,indents){
        for(let i = 0 ; i < elem.info.length;i++){
        if (elem.info[i].name == name){
            indents.push(elem.total)
        }
        return (
            Math.min(...indents)
           )
    }
}

标签: reactjs

解决方案


您正在使用的数据结构并不适合此特定搜索,但是您可以通过以下方式获得答案:

const minTotalByName = (data, name) => {
    
    const totals = data
    .filter(x => 
        x.obj.info.find(y => y.name === name)
     ).map(x => x.obj.total);

    return Math.min(...totals);
}

const min = minTotalByName(data, "mina"); // 1000

推荐阅读