js中对象转数组然后转为查询字符串,

本文介绍了如何将JavaScript对象转换为查询字符串,并反向操作,从查询字符串转换回对象。同时,展示了如何利用JSON.stringify和JSON.parse进行对象与JSON字符串之间的转换。

1、对象转查询字符串

Object.keys(key) 把对象的所有属性收集起来,放到一个数组中返回

var obj = {name: "abc",a: 1,b: 2,c: 300,d: 100};

var res;//定义了一个空数组

var arr = Object.keys(obj);

console.log(arr);

res = arr.map(function(item) {

// 这里为什么能够使用obj[item],遍历的arr数组中又没有obj[item]

 //因为map不改变原来的数组,obj没变,obj对象是全局的依然可以使用。 obj[a] 获取的是属性值

return item + '=' + obj[item];

})

console.log(res); //["name=abc", "a=1", "b=2", "c=300", "d=100"]

res = res.join('&');

console.log(res);//"name=abc&a=1&b=2&c=300&d=100"

// 封装函数

function myParams(obj) {

return Object.keys(obj).map(function(item) {

return item + '=' + obj[item];

}).join('&');

}

2、查询字符串转数组转对象

 

     var str = 'http://www.baidu.com?a=Jack&b=2&c=3'

      var arr1 = str.split('?')[1]; 

      console.log(arr1);//a=Jack&b=2&c=3

      arr1 = arr1.split('&') 

      console.log(arr1);//["a=Jack", "b=2", "c=3"]

      var newArr = new Object();

      for (let i = 0; i < arr1.length; i++) {

        var key = arr1[i].split('=')[0];

        var value = arr1[i].split('=')[1];

        newArr[key] = value;

      }

      console.log(newArr);//["a=Jack", "b=2", "c=3"]

补充一下:对象转json字符串成,对象和JSON字符串的区别是,JSON字符串的属性名也要加引号

JSON.stringify() 转换为json字符串,JSON.parse() 转换为对象

console.log(JSON.stringify(newArr));//{"a":"Jack","b":"2","c":"3"}

console.log(JSON.parse(JSON.stringify(newArr)));//{a: "Jack", b: "2", c: "3"}

<think>嗯,用户明确要求查找JavaScript字符串转数的方法,这应该是用户当前的核心需求。结合站内引用内容,发现主要涉及split()方法和ES6的新特性(如扩展运算符和Array.from)。用户提供的引用中,引用[1][2][3]都提到了split()方法,引用[3]还补充了扩展运算符和Array.from这些现代JavaScript特性。 用户可能正在处理字符串操作任务,需要将字符串拆分为可遍历的数结构。考虑到用户专门提问"方法"而非基本原理,说明ta更关注实用解决方案而非理论。引用[2]中关于split()参数使用的示例很详细,特别分隔符的选择部分对用户应该很有帮助——空字符串分割字符和空格分割是常见场景。 注意到引用[4]虽然主题是数去重,但演示了split()的实际应用场景,这个案例可以作为补充说明。不过用户当前需求集中在"换"而非"去重",所以只需简要提及该方法可作为后续处理的准备步骤即可。 从回答设计上,应该突出三点:基础方法(split()及其参数)、现代语法(ES6特性)、特殊场景处理(如包含emoji的字符串)。这样既覆盖新手需要的详细说明,也满足进阶开发者对性能和新语法的关注。示例代码需要包含空字符串分割、指定分隔符分割、Unicode字符处理三类经典案例。 用户没有提供具体字符串格式,所以需要说明不同分隔符的选择逻辑。比如逗号分隔的CSV、空格分隔的单词列表等场景差异。引用[3]提到的slice方法虽然可行但效率偏低,放在最后作为补充比较合适。 </think>以下是 JavaScript 中将字符串换为数的常用方法与详细说明: ### 一、核心方法:`split()` **语法**:`str.split([separator[, limit]])` **功能**:按指定分隔符分割字符串,返回子字符串成的数。 **示例**: ```javascript // 1. 按空格分割(适用于单词分割) const str1 = "apple banana orange"; const arr1 = str1.split(" "); // 结果:["apple", "banana", "orange"] [^2] // 2. 按空字符串分割(拆分每个字符) const str2 = "hello"; const arr2 = str2.split(""); // 结果:["h", "e", "l", "l", "o"] [^2][^3] // 3. 按逗号分割(处理 CSV 数据) const str3 = "id,name,age"; const arr3 = str3.split(","); // 结果:["id", "name", "age"] // 4. 限制分割次数(limit 参数) const str4 = "a-b-c-d"; const arr4 = str4.split("-", 2); // 结果:["a", "b"](只保留前2个元素) ``` ### 二、ES6 进阶方法 1. **扩展运算符 `[...string]`** 直接展开字符串为字符数,支持 Unicode 字符(如 emoji): ```javascript const emoji = "👍👋"; const arr5 = [...emoji]; // 结果:["👍", "👋"](正确拆分复合字符) ``` 2. **`Array.from(string)`** 将可迭代对象(如字符串转为: ```javascript const str6 = "abc"; const arr6 = Array.from(str6); // 结果:["a", "b", "c"] [^3] ``` ### 三、特殊场景处理 **包含多行文本**:结合换行符 `\n` 分割 ```javascript const logs = `Error 404 Error 500 Success 200`; const logArr = logs.split("\n"); // 结果:["Error 404", "Error 500", "Success 200"] ``` ### 四、方法对比总结 | 方法 | 适用场景 | 是否支持Unicode | 兼容性 | |--------------------|----------------------------------|----------------|-------------| | `split("")` | 简单字符拆分 | ❌(可能乱码) | 全浏览器支持 | | `[...string]` | 含复杂字符的拆分 | ✅ | ES6+ | | `Array.from()` | 需操作数元素的场景 | ✅ | ES6+ | | `split(自定义分隔符)` | 结构化数据(如CSV、日志) | ✅ | 全浏览器支持 | > ⚠️ **注意**:使用 `split("")` 拆分包含复合 Unicode 字符(如 emoji、某些语言字符)时可能出现乱码,此时优先选择 `[...string]` 或 `Array.from()`。 --- ### 常见问题场景 1. **换后去重**(如引用[4]) 结合 `Set` 实现数去重: ```javascript const str = "aabbcc"; const uniqueArr = [...new Set(str.split(""))]; // 结果:["a", "b", "c"] ``` 2. **处理混合数据** 若需同时处理字符串和数(如引用[4]中的 `imgSrc` 和 `imgId`),先分别换再关联处理: ```javascript const imgSrc = "file1.jpg,file2.png"; const imgId = "1001,1002"; const srcArr = imgSrc.split(","); const idArr = imgId.split(","); // 合并为对象:[{src: "file1.jpg", id: "1001"}, ...] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值