javascript - 将 Object.entries() 减少为字符串并获得随机逗号
问题描述
感谢您的快速回答,是的,因为你们指出这是初始值的问题。另外,按照您的建议,我转而使用地图,现在正在使用,
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
. 它是如此接近,但由于某种原因,有 a,
而不是:
between artist
and 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
改用,这是一个更好的主意 IMO,因为生成的字符串的每个段都可以通过 连接&
,这比切片第一个要好&
:
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, '+'));
推荐阅读
- sql - 用零填充 PostgreSQL 中缺失的日期
- java - 手机翻转时如何更改魔术8球答案?
- javascript - 如何使变量不开始新行
- python - 有没有办法在运行其他代码的同时每小时执行一次代码?
- smalltalk - “元类类”真的只是元类吗?
- swift - 无法使用 iOS 13 中的 diffable 数据源使用 tableview 滑动删除
- mysql - 如何检查 RDS Aurora 中表的状态 - MySQL 5.6 只读副本
- azure - 带有 OpenId Connect 的 Azure 流量管理器
- c++ - 我正在使用 VS 代码,但 cout 无法正常工作
- javascript - JQuery 函数似乎更新了选择器,但没有显示任何项目