[英]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.