【问题标题】:How do I turn an array of JavaScript objects into an URL string with only one loop?如何将一组 JavaScript 对象转换为只有一个循环的 URL 字符串?
【发布时间】:2023-01-09 18:30:44
【问题描述】:

我正在尝试将 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 循环。

我怎样才能只用一个循环达到相同的结果?

【问题讨论】:

  • 看不到如何避免 2 个循环
  • 它是一个包含多个不同键的对象的数组,因此您需要两个循环。如果您创建一个始终具有相同键的结构,那么您可以使用一个循环来完成此操作。
  • Smells like Premature Optimisation。您是否经常调用此代码以致于对性能产生显着影响?
  • 请注意,您的代码无法转义数据中可能存在的任何特殊字符。使用 URLSearchParams 会更健壮。

标签: javascript object foreach


【解决方案1】:

至少,您需要使用连接键和值映射条目,并连接嵌套条目和外部数组。

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

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2021-11-07
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多