鍍金池/ 問(wèn)答/Linux  HTML/ 怎么用Js解析這種復(fù)雜的url?包括重復(fù)的Key轉(zhuǎn)化為數(shù)組,未指定值約定為1等等

怎么用Js解析這種復(fù)雜的url?包括重復(fù)的Key轉(zhuǎn)化為數(shù)組,未指定值約定為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 語(yǔ)法
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)
    }
  }, {})

希望對(duì)你有幫助。

2017年2月17日 07:18
編輯回答
深記你

供參考

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
  }, {})
2017年9月22日 22:01
編輯回答
荒城

要在賦值的地方做個(gè)判斷

// 先聲明一個(gè)變量
var hash = {};
url.replace(//([^=?&]+)=([^=?&]+)//g,function(){
    if(!hash[obj[arguments[1]]]){
        obj[arguments[1]] = arguments[2];
        hash[arguments[1]] = true;
    }else{
        // 這里做是否是第一個(gè) 條件判斷看你自己的需求
        if(Array.isArray(obj[arguments[1]])){
            obj[arguments[1]].push(arguments[2]);
        }else{
            const firstVal = obj[arguments[1]];
            obj[arguments[1]] = [firstVal,arguments[2]];
        }
    }
})
2017年10月19日 03:39
編輯回答
蟲児飛
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))

感覺寫的更復(fù)雜。

權(quán)當(dāng)拋磚引玉。

2017年12月15日 20:06