鍍金池/ 問答/HTML/ JS 代碼優(yōu)化

JS 代碼優(yōu)化

在二維數(shù)組里面尋找包含特定屬性值的 Object 如下代碼
找了一下lodash 封裝的方法發(fā)現(xiàn)沒有多維查找的方法,所以對外層做了循環(huán)
但是賦值的時(shí)候有兩個(gè)要找的對象,這種清空下是否能break 減少循環(huán)次數(shù)?

optionsData = [
                    {
                        key: 'metric',
                        name: '公制',
                        values: [
                            {text: 'mm(毫米)', key: 'mm', value: 0, formula: 1},
                            {text: 'cm(厘米)', key: 'cm', value: 0, formula: 10},
                            {text: 'dm(分米)', key: 'dm', value: 0, formula: 100},
                            {text: 'm(米)', key: 'm', value: 0, formula: 1000},
                            {text: 'km(千米)', key: 'km', value: 0, formula: 10000}
                        ]
                    },
                    {
                        key: 'cn',
                        name: '中國',
                        values: [
                            {text: '豪', key: 'cn_hao', value: 0, formula: 1 / 30},
                            {text: '厘', key: 'cn_li', value: 0, formula: 1 / 3},
                            {text: '分', key: 'cn_fen', value: 0, formula: 10 / 3},
                            {text: '寸', key: 'cn_cun', value: 0, formula: 100 / 3},
                            {text: '尺', key: 'cn_chi', value: 0, formula: 1000 / 3},
                            {text: '丈', key: 'cn_zhang', value: 0, formula: 10000 / 3},
                            {text: '里', key: 'cn_Li', value: 0, formula: 500000}
                        ]
                    },
                    {
                        key: 'navigation',
                        name: '航海',
                        values: [
                            {text: '海里', key: 'nautical', value: 0, formula: 1852000},
                            {text: '英尋', key: 'xun', value: 0, formula: 1828.8}
                        ]
                    },
                    {
                        key: 'astronomy',
                        name: '天文',
                        values: [
                            {key: 'pc', text: '秒差距 (pc', value: 0, formula: 3.08567758 * Math.pow(10, 19)},
                            {key: 'light_year', text: '光年', value: 0, formula: 9.4605284 * Math.pow(10, 18)},
                            {key: 'ae', text: '天文單位 (AE)', value: 0, formula: 1.49597871 * Math.pow(10, 14)},
                            {
                                key: 'light_second',
                                text: '光秒',
                                value: 0,
                                formula: 2.99792458 * Math.pow(10, 11)
                            },
                            {
                                key: 'light_minute',
                                text: '光分',
                                value: 0,
                                formula: 1.79875475 * Math.pow(10, 13)
                            }
                        ]
                    },
                    {
                        key: 'en_us',
                        name: '英/美',
                        values: [
                            {key: 'in', text: '英寸(in)', value: 0, formula: 25.4},
                            {key: 'ft', text: '英尺(ft)', value: 0, formula: 304.8},
                            {key: 'mi', text: '英里(mi)', value: 0, formula: 1609344},
                            {key: 'yd', text: '碼(yd)', value: 0, formula: 914.4}
                        ]
                    }
                ],

_.forEach(optionsData, function (value, key) {
                    if (_.find(value.values, {'key': 'mm'})) {
                        to_obj = _.find(value.values, {'key': 'mm'});
                    }
                    if (_.find(value.values, {'key': 'cm'})){
                        from_obj = _.find(value.values, {'key': 'cm'});
                    }
                });
回答
編輯回答
陌離殤

意思看明白了,是想找到to_objfrom_obj就退出forEach是吧。 lodash的forEach方法在顯示返回false時(shí)會(huì)退出循環(huán)的。
然后你的find也多執(zhí)行了,改成這樣:

 to_obj = null,
    from_obj = null;
_.forEach(optionsData, function (value, key) {
    to_obj = _.find(value.values, {
        'key': 'mm'
    });

    from_obj = _.find(value.values, {
        'key': 'cm'
    });
    if (to_obj && from_obj) return false;
});

這樣效率最好

2018年8月13日 11:42