写一个方法对以下字符串进行操作,找出规律,返回相应的结果。

最近呢,很多培训完的小伙伴出来找工作,遇到了笔试题,觉得很难。有道题呢,很多人找我做过,是什么样子的题目呢?我们一起来看

var str1 = "http://test.com?foo=active@987df&key=123&key=78";

var str2 = "http://test.com?too=last@4567&key=555&value=test";

function show(){},让封装一个函数show

打印show(str1); //返回结果 {foo:'active',key:[123,78]}

打印show(str2); //返回结果 {too:'last',key:555,value:'test'}

首先,遇到这个问题,我们要想到一系列数组字符串API,将字符串用"?"分成一个数组,再看后边的部分,再用"&"分开,因为结果中的数字不能是字符串,我们还应当将得到的数字字符串转成number类型。

一句话,把这里边"="之前的作为对象的key,值都是一个数组,然后一个一个加,最后如果数组长度只有一个,就toString(),如果是数字,再Number

二话不说,上代码

function show(str) {

            let s = str.split('?')[1];      //得到foo=active@987df&key=123&key=78

            //再将s以&分开

            let arr = s.split("&");        //得到数组['foo=active@987df', 'key=123', 'key=78']

            //声明一个空对象来装键值对

            let obj = {};

            //遍历arr,将每一项'='前的放入对象作为key,后边放入数组

            for (let j = 0; j < arr.length; j++) {

                let char = arr[j].split("=")[0];

                let charV = arr[j].split("=")[1];

                if (obj[char] == undefined) {

                    //用数组装着

                    obj[char] = [];

                     //判断是否有@  这是下边封的方法,用的三目运算符

                    obj[char].push(judge(charV) ? charV.split("@")[0] : charV)

                } else {

                    obj[char].push(charV)

                }

            }

            //遍历对象,如果值的长度为一,就转成字符串,不用数组

            for (let k in obj) {

                if (obj[k].length == 1) {

                    //判断是否转为数字不是NaN

                    //类似[555]这种

                    if (!isNaN(Number(obj[k][0]))) {

                        obj[k] = Number(obj[k].toString())

                    } else {

                        obj[k] = obj[k].toString()

                    }

                } else {

                    for (let j in obj[k]) {

                        if (!isNaN(Number(obj[k][j]))) {

                            obj[k][j] = Number(obj[k][j])

                        }

                    }

                }

            }

            return obj

        }

        //封装方法,判断字符串是否有@

        function judge(str) {

            //返回有没有@   ES6字符串新方法  includes   意思是包括的意思,加s可以理解成第三人称单数

            return str.includes("@");

        }

        console.log(show(str1));

        console.log(show(str2));

猜你喜欢

转载自blog.csdn.net/weixin_68067009/article/details/124787840