请问这题如何解?

如图:有一个字符串 str,和一个空对象obj,把他变成如下格式。

clipboard.png

我的错误解法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="" name="">
    <button>ok</button>
    <div></div>
    <script type="text/javascript">
        //q1
        (function() {
            var ipt = document.getElementsByTagName('input')[0],
                btn = document.getElementsByTagName('button')[0],
                div = document.getElementsByTagName('div')[0],
                obj = {};
            document.addEventListener('keyup', function(e) {
                if (e.keyCode === 13) {
                    btn.click();
                }
            });

            btn.addEventListener('click', function(e) {
                obj = {};
                var v = ipt.value;
                if (v === "") {
                    div.innerHTML = ('no input!');
                } else {
                    var arr = v.split(/[, _]/);
                    console.log(arr);
                    for (var i = 0; i < arr.length; i++) {
                        obj[arr[i]] = {};
                    }
                    div.innerHTML = ('obj = ' + JSON.stringify(obj));
                }
            });
        }());
        //q2
    </script>
</body>
</html>

得出的结果不是嵌套的,求高手解惑。

阅读 2.6k
5 个回答

你的写法是显然不对的,参考我的改动(一共改动四行),算是一种方案。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<input type="" name="">
<button>ok</button>
<div></div>
<script type="text/javascript">
    //q1
    (function() {
        var ipt = document.getElementsByTagName('input')[0],
                btn = document.getElementsByTagName('button')[0],
                div = document.getElementsByTagName('div')[0],
                obj = {};
        document.addEventListener('keyup', function(e) {
            if (e.keyCode === 13) {
                btn.click();
            }
        });

        btn.addEventListener('click', function(e) {
            var temp; //增加
            obj = temp ={};//增加
            var v = ipt.value;
            if (v === "") {
                div.innerHTML = ('no input!');
            } else {
                var arr = v.split(/[, _]/);
                console.log(arr);
                for (var i = 0; i < arr.length; i++) {
                    temp[arr[i]]={};//增加
                    temp=temp[arr[i]];//增加
                }
                div.innerHTML = ('obj = ' + JSON.stringify(obj));
            }
        });
    }());
    //q2
</script>
</body>
</html>

图片的逻辑可以这样实现

    var str ="key3,key2,key3,key1";
    var obj ={};
    var strList = str.split(",");
    for(var i = strList.length;i >= 0;--i){
        var obj2={};
        obj2[strList[i]]=obj;
        obj = obj2;
    }
    console.log(obj);

Literally one liner's showing off:

var str ="key1,key2,key3,key4";

function strToObj(str) {
    return str.split(",").reverse().reduce((acc, ele) => ({[ele]: acc}), {})
}

strToObj(str);
var str='key1.key2.key3';
var obj={};
var array=str.split('.');
var that=obj;
for(var i=0;i<array.length;i++){
    that[array[i]]={};
    that=that[array[i]];
}
console.log(JSON.stringify(obj));
新手上路,请多包涵
<body>
    <input id="box" value="key1.key2.key3"/>
    <button type="button" onclick="getObj()">解析</button>
    <div id="resultDom"></div>
</body> 
<script>
    function getObj(){
        var str =box.value;
        var arr =str.split(".");
        var result ={};
        var evalhtml="";
        for(var i=0,len=arr.length;i<len;i++){
            var temp="";
            for(var j=0;j<=i;j++){
                temp+="[arr["+j+"]]";
            }
            evalhtml+="result"+temp+"={};";
        }
        eval(evalhtml);
        resultDom.innerHTML=JSON.stringify(result);
    }
</script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题