如何使用 jquery 将序列化的字符串转换为数组

Posted

技术标签:

【中文标题】如何使用 jquery 将序列化的字符串转换为数组【英文标题】:How to convert a serialized string into an array using jquery 【发布时间】:2018-12-21 01:47:37 【问题描述】:

我有这个字符串

foo = 'accordion-section[]=eat&accordion-section[]=pray&accordion-section[]=love'

如何在 jquery 中将其转换为array('eat', 'pray', 'love')

【问题讨论】:

你可以用正则表达式来做到这一点 为什么jQuery这个DOM操作库要负责字符串解析?这应该用javascript解决。 【参考方案1】:

它不是 jQuery,但您可以使用新的 URLSearchParams api 将值提取到新数组中。

注意: IE 不支持。

const foo = 'accordion-section[]=eat&accordion-section[]=pray&accordion-section[]=love&anotherValue=5';

const searchParams = new URLSearchParams(foo);

const result = searchParams.getAll('accordion-section[]');

console.log(result);

【讨论】:

我接受这个答案,因为它是一种新的方式而且很短【参考方案2】:

var foo = 'accordion-section[]=eat&accordion-section[]=pray&accordion-section[]=love';

//split the string by the & so you get key value pairs, and reduce them into a single object
var params = foo.split('&').reduce(function(results, keyValue)
  //split the key value pair by the =
  var [key, value] = keyValue.split('=');
  
  //if the key already exists, we need to convert the value to an array, and then push to the array
  if (results[key]) 
    if (typeof results[key] === 'string') 
      results[key] = [ results[key] ];
    
    
    results[key].push(value);
   else 
    //key did not exist, just set it as a string
    results[key] = value;
  
  
  //return the results for the next iteration
  return results;
, );

//console.log the results
console.log(params);

【讨论】:

【参考方案3】:

function parse_query_string(query) 
  var vars = query.split("&");
  var query_string = ;
  for (var i = 0; i < vars.length; i++) 
    var pair = vars[i].split("=");
    var key = decodeURIComponent(pair[0]);
    var value = decodeURIComponent(pair[1]);
    // If first entry with this name
    if (typeof query_string[key] === "undefined") 
      query_string[key] = decodeURIComponent(value);
      // If second entry with this name
     else if (typeof query_string[key] === "string") 
      var arr = [query_string[key], decodeURIComponent(value)];
      query_string[key] = arr;
      // If third or later entry with this name
     else 
      query_string[key].push(decodeURIComponent(value));
    
  
  return query_string;


foo = 'accordion-section[]=eat&accordion-section[]=pray&accordion-section[]=love';

// as an object
console.log(parse_query_string(foo))


// as an array
var fooArray = $.map(parse_query_string(foo), function(value, index) 
    return [value];
);
console.log(fooArray)
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

以上是关于如何使用 jquery 将序列化的字符串转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 将 HTML 文本区域转换为 word:count 键值数组?

在javascript中如何将字符串转换为数组和数组转换为字符串

将 jQuery 数组字符串转换为 PHP 数组

如何将 C++ 中的空字符序列转换为 Python 中的等效字符?

如何将带有参数数组的字符串 xml 转换为 .NET Core 中的对象

java中如何将字符串数组保存在数据库里