【Web前端问题】怎么用Js解析这种复杂的url?包括重复的Key转化为数组,未指定值约定为1等等要求?

图片描述

回答:

一切没有返回值的 replace 都是耍流氓

var obj = url.match(/([^=?&]+)(=[^=?&]+)?/g)

.reduce(function (acc, match) {

var splits = match.split('='),

key = splits[0],

value = decodeURIComponent(splits[1] || '') || true

if (acc[key] === undefined) acc[key] = value

else acc[key] = [].concat(acc[key], value)

return acc

}, {})

// 或者如果使用 ES6 语法

const obj = url.match(/([^=?&]+)(=[^=?&]+)?/g)

.map(match => match.split('='))

.reduce((acc, [key, valueStr]) => {

const value = decodeURIComponent(valueStr || '') || true

return {

...acc,

[key]: acc[key] === undefined ? value : [].concat(acc[key], value)

}

}, {})

希望对你有帮助。

回答:

供参考

const obj = url

.substr(1)

.split('&')

.reduce((o, p) => {

let [k, v = ''] = p.split('=')

v = v === '' || (isNaN(v) ? v : Number(v))

o[k] = o[k]

? Array.isArray(o[k])

? [...o[k], v]

: [o[k], v]

: v

return o

}, {})

回答:

var url = '?user=cmz&age=21&age=23&city=北京&enable'

/**

*

* @param {string} string

*/

function parse(string) {

let query = string.replace(/^\?/, '')

return query.split('&').reduce((obj, next) => {

let parts = next.split('=')

let key = parts[0]

let value = parts[1]

if (obj.hasOwnProperty(key)) {

obj[key] = Array.isArray(obj[key]) ? [...obj[key], value] : [obj[key], value]

} else {

obj[key] = value ? value : true

}

return obj

}, {})

}

console.log(parse(url))

感觉写的更复杂。

权当抛砖引玉。

回答:

要在赋值的地方做个判断

// 先声明一个变量

var hash = {};

url.replace(//([^=?&]+)=([^=?&]+)//g,function(){

if(!hash[obj[arguments[1]]]){

obj[arguments[1]] = arguments[2];

hash[arguments[1]] = true;

}else{

// 这里做是否是第一个 条件判断看你自己的需求

if(Array.isArray(obj[arguments[1]])){

obj[arguments[1]].push(arguments[2]);

}else{

const firstVal = obj[arguments[1]];

obj[arguments[1]] = [firstVal,arguments[2]];

}

}

})

以上是 【Web前端问题】怎么用Js解析这种复杂的url?包括重复的Key转化为数组,未指定值约定为1等等要求? 的全部内容, 来源链接: utcz.com/a/139960.html

回到顶部