在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ JS 字符串轉(zhuǎn) 對(duì)象的問題

JS 字符串轉(zhuǎn) 對(duì)象的問題

微信小程序有個(gè)功能需求要把 字符串轉(zhuǎn)對(duì)象,之前用 eval 方法可以很快實(shí)現(xiàn)
大概過(guò)程是這樣:

    var name = 'bb[0]'; //name 是變量,這里假設(shè)它值是'bb[0]',也可能傳過(guò)來(lái)的值是'aa[0] 或 bb[1]'
    var data = {"aa":["111","222"],"bb":["333","444"]}; //data的值是固定的
    var newData = eval('data.'+name); //方法 1
    //console.log(newData)  結(jié)果是333
    var jsonStr = JSON.stringify(data);
    var newData = (new Function("var temp = " + jsonStr + ';return temp.'+ name))();//方法2
    //console.log(newData)  結(jié)果是333

后面發(fā)現(xiàn)小程序更新后,禁掉的原有js功能:new Function、eval、Generator。 也就是說(shuō)之前的方法都不能用了。
求問 除了上面的2個(gè), 還有什么方法能讓newData 獲得正確的結(jié)果()。

回答
編輯回答
安淺陌

你可以這么寫
var name = 'bb[0]';====> 通過(guò)正則轉(zhuǎn)換成 var test = ['bb', '0']

然后 newData = data[test[0]].test[1]

2017年6月3日 16:50
編輯回答
解夏

正則匹配一下就行了

        function aaa(json,str){
                var b =  str.replace(/(\S)\[([0-9]+)\]/,'$1,$2').split(',');
                return json[b[0]][b[1]];
            }
            var newData = aaa(data,name); 
            console.log(newData);
2018年9月16日 16:14
編輯回答
心上人

難道不應(yīng)該是 lodash 的 _.at ?不用造輪子,lodash 現(xiàn)成的給你用。

var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
 
_.at(object, ['a[0].b.c', 'a[1]']);
// => [3, 4]

猛戳官方文檔 _.at

2017年12月24日 06:36
編輯回答
陌離殤
data['bb']['0']
2018年9月21日 14:11
編輯回答
蝶戀花
function trans(data, name) {
    let reg = /\[?[^\[\]]+\]?/g
    let reg2 = /\]/
    let names = name.match(reg)
    if (names.length) {
        names = names.map(item => reg2.test(item) ? item.slice(1, -1) : item)
        return names.reduce((sum, cur) => sum[cur], data)
    }
}

var data = {"aa":["111","222"],"bb":["333","444"]};
var name = 'bb[0]';
trans(data, name)
2018年9月15日 15:03
編輯回答
大濕胸
var data = {"aa":["111","222"],"bb":["333","444"]};
name = 'bb[0]';


function getNewData(data, name){
    var prefix = name.split('[')[0],
        endStr = name.split('[')[1];
    var index = endStr.split(']')[0];
    return data[prefix][index];
}

var newName =  getNewData(data, name);
console.log(newName); // 333

'

2018年1月9日 06:58