繁体   English   中英

如何将一组 JavaScript 对象转换为只有一个循环的 URL 字符串?

[英]How do I turn an array of JavaScript objects into an URL string with only one loop?

我正在尝试将 JavaScript 对象的数组转换为带有参数的 URL 字符串,如下所示:

 const objects = [{ firstName: "John", lastName: "Doe", age: 46 }, { country: "France", lastName: "Paris" } ] let entry_arr = []; objects.forEach(obj => { Object.entries(obj).forEach(entry => { entry_arr.push(entry.join('=')); }); }); let entry_str = entry_arr.join('&'); console.log(entry_str);

从表面上看,上面的代码是有效的。 但是有一个问题

问题

如您所见,我有 2 个嵌套的forEach循环。 为了获得更好的性能,我希望我知道如何避免这种嵌套,而是只使用一个forEach循环。

如何只用一个循环就可以达到相同的结果?

将数组中的每个 object 合并到一个主数组中是我能想到的唯一解决方案。 (我假设 lastName: paris 是一个错字)

 const objects = [{ firstName: "John", lastName: "Doe", age: 46 }, { country: "France", city: "Paris" } ] const obj = objects.reduce((acc, obj) => Object.assign(acc, obj), {}); const entry_str = Object.entries(obj).map(entry => entry.join('=') ).join('&'); console.log(entry_str);

Nina 提供的答案仍然使用嵌套循环,而不是使用 forEach,而是使用 map。

对于特殊字符处理,我强烈建议使用URLSearchParams class。

我建议将对象数组加入一个对象中,并减少并导入URLSearchParams中的条目

 const objects = [ { firstName: "John", lastName: "Doe", age: 46 }, { country: "France", lastName: "Paris" }]; let reduced = objects.reduce((acc, object) => Object.assign(acc, object)) let params = new URLSearchParams(reduced); console.log(reduced); console.log(params.toString());

至少,您需要 map 具有连接键和值的条目并连接嵌套条目和外部数组。

 const objects = [{ firstName: "John", lastName: "Doe", age: 46 }, { country: "France", lastName: "Paris" }], result = objects.map(object => Object.entries(object).map(entry => entry.join('=')).join('&') ).join('&'); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM