javascript - 将 Object.entries() 减少为字符串并获取随机逗号

标签 javascript dictionary object

感谢您的快速解答,是的,正如你们指出的那样,这是初始值的问题。另外,根据您的建议,我改用 map 并且现在正在使用,

const q = Object.entries(query).map(
  ([key, val]) => `${key}=${encodeURIComponent(val)}`).join('&');

========

注意:我提出这个问题更多是出于好奇,因为我最终找到了替代解决方案。

我有一个查询对象

{
  artist: 'Jon Bellion',
  title: 'Kingdom Come'
}

并希望将其转换为字符串 artist:Jon+Bellion&title:Kingdom+Come 。我的第一次尝试是尝试对对象的条目使用reduce,如下所示。

const query = { artist: 'Jon Bellion', title: 'Kingdom Come' };

let q = Object.entries(query).reduce(
      (str, [key, val]) => `${str}&${key};${val}`
    );

q = q.replace(/\s/g, '+');
console.log(q);

此代码生成 artist,Jon+Bellion&title:Kingdom+Come 。它非常接近,但由于某种原因,在 ,: 之间有一个 artist 而不是 Jon

我最终切换到

let str = '';
Object.entries(query).forEach(
    ([key, value]) => (str += `${key}:${value}&`),
);
const q = str.replace(/\s/g, '+').slice(0, -1);
console.log(q);

这给了我想要的结果,artist:Jon+Bellion&title:Kingdom+Come

最佳答案

您没有将初始值传递给reduce,因此初始值被视为第一个条目,即

['artist', 'Jon Bellion']

reduce 的第一次(也是唯一一次)迭代中,它被转换为字符串:

`${str}

这意味着数组中的项目通过逗号连接:

'artist,Jon Bellion'

或者传递空字符串的初始值:

const query = { artist: 'Jon Bellion', title: 'Kingdom Come' };

let q = Object.entries(query).reduce(
      (str, [key, val]) => `${str}&${key}:${val}`,
      ''
    );

q = q.replace(/\s/g, '+').slice(1);
console.log(q);

或者使用 .map 代替,在我看来这是一个更好的主意,因为生成的字符串的每个片段都可以通过 & 连接,这比切片更好首先 & 关闭:

const query = { artist: 'Jon Bellion', title: 'Kingdom Come' };

const strs = Object.entries(query).map(([key, val]) => `${key}:${val}`);
console.log(strs.join('&').replace(/\s/g, '+'));

关于javascript - 将 Object.entries() 减少为字符串并获取随机逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60747723/

相关文章:

javascript - 用于字符数字和所有字符、数字和 ~_&*%@$ 的正则表达式

c++ - 在 C++ 中具有相同类的属性

javascript:将 key 从 for 循环传递到另一个函数失败

javascript - v-on 处理程序中出现错误 : "TypeError: Cannot read property ' emit' of null

javascript - Google Maps API v3 从 drawingManager 保存和重用形状

python - 如何在 python 中查找英语词典?

javascript - 美国 map 插件(JQuery 插件)上的禁用状态

python - 将多个词典写入 csv 文件?

javascript - 在javascript中关闭 '()'后这个符号 '{}'做什么

javascript - 无法读取 ExternalModuleFactoryPlugin.js :30 处未定义的属性 'tapAsync'