感谢您的快速解答,是的,正如你们指出的那样,这是初始值的问题。另外,根据您的建议,我改用 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/