为了账号安全,请及时绑定邮箱和手机立即绑定

js 算法问题

js 算法问题

互换的青春 2019-03-30 18:15:55
有两个数组    formThead: [                {                    label:'机会名称',                    value:'oppoProjectName',                    isShow:true                },                {                    label:'客户名称',                    value:'customerName',                    isShow:true                },                {                    label:'销售',                    value:'saleName',                    isShow:true                }            ]                        formTheadData:['oppoProjectName','customerName']                        如果在formThead中任何一位的value都不在formTheadData中   就把对用的formThead中的isShow变成false            
查看完整描述

5 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

formThead.forEach((item) => {

  item.isShow = formTheadData.includes(item.value);

});


查看完整回答
反对 回复 2019-04-08
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

更新 2

let hash = formTheadData.reduce((p, c) => [p[c] = 0, p][1], {});


// 得到 hash

// {

//     oppoProjectName: 0,

//     customerName: 0

// }

formThead.forEach((item) => {

    // 不使用 includes 来检索数据

    //  item.isShow = formTheadData.includes(item.value);

    item.isShow = !!hash[item.value]

});

这样就可以避免循环嵌套,性能可以有大幅提升。

filter 是会返回一个新数组的,因此这个解法很有问题。

非常抱歉,由于不是专职前端,这些细节容易忽略,误导题主和各位了。

原答案:

formThead.filter(h => formTheadData.indexOf(h.value) === -1).forEach(h => h.isShow = false)


查看完整回答
反对 回复 2019-04-08
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

var formThead= [

                {

                    label:'机会名称',

                    value:'oppoProjectName',

                    isShow:true

                },

                {

                    label:'客户名称',

                    value:'customerName',

                    isShow:true

                },

                {

                    label:'销售',

                    value:'saleName',

                    isShow:true

                }

            ]

            

            formTheadData=['oppoProjectName','customerName']

            

            for(var i=0;i<formThead.length;i++){

                for(var j=0;j<formTheadData.length;j++){

                    if(formThead[i].value==formTheadData[j]){

                        formThead[i].isShow=true

                    }else{

                        formThead[i].isShow=false

                    }

                }

            }


查看完整回答
反对 回复 2019-04-08
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

formThead.map((item) => {

    item.isShow = false;

    formTheadData.some((el,index) => {

        if(item.value == el){

            item.isShow = true;

            formTheadData.splice(index,1);

            return true;

        }

    })

})


查看完整回答
反对 回复 2019-04-08
?
MM们

TA贡献1886条经验 获得超2个赞

“如果在formThead中任何一位的value都不在formTheadData中 就把对用的formThead中的isShow变成false”

楼主你能先解释下你这句话的意思吗?只从字面理解的话,只要formThead中的所有item的value都不在formTheadData中的话,就把formThead中所有的item的value变成false。但是貌似你又想表达formThead如果有item的value不存在formTheadData中的就把它的isShow置为false。

查看完整回答
反对 回复 2019-04-08
  • 5 回答
  • 0 关注
  • 496 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信