鍍金池/ 問答/HTML/ js 算法問題

js 算法問題

有兩個數(shù)組

    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
            
            
回答
編輯回答
練命

更新 2

在評論中與 @SlimBear 討論后,發(fā)現(xiàn)解法上可以優(yōu)化一下:

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

// 得到 hash
// {
//     oppoProjectName: 0,
//     customerName: 0
// }
formThead.forEach((item) => {
    // 不使用 includes 來檢索數(shù)據(jù)
    //  item.isShow = formTheadData.includes(item.value);
    item.isShow = !!hash[item.value]
});

這樣就可以避免循環(huán)嵌套,性能可以有大幅提升。


更新

經(jīng)評論 @SlimBear 提醒,filter 是會返回一個新數(shù)組的,因此這個解法很有問題。

非常抱歉,由于不是專職前端,這些細節(jié)容易忽略,誤導題主和各位了。

正解可以看 @原罪 的答案。


原答案:

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

2018年1月15日 00:17
編輯回答
心沉

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


@李坦 樓主你能先解釋下你這句話的意思嗎?只從字面理解的話,只要formThead中的所有item的value都不在formTheadData中的話,就把formThead中所有的item的value變成false。但是貌似你又想表達formThead如果有item的value不存在formTheadData中的就把它的isShow置為false。我感覺 @大胡子先生 的答案受了誤導。

2017年8月13日 07:04
編輯回答
鹿惑

謝謝大家哈~ 問題@原罪已幫助完美解決~

2017年3月4日 05:59
編輯回答
醉淸風
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
                    }
                }
            }
2018年3月12日 18:38
編輯回答
久舊酒
formThead.forEach((item) => {
  item.isShow = formTheadData.includes(item.value);
});
2018年6月16日 06:51
編輯回答
葬憶
formThead.map((item) => {
    item.isShow = false;
    formTheadData.some((el,index) => {
        if(item.value == el){
            item.isShow = true;
            formTheadData.splice(index,1);
            return true;
        }
    })
})
2017年2月13日 03:51