首页 > 解决方案 > 将 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 artistand 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.

标签: javascriptdictionaryobject

解决方案


您没有将初始值传递给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, '+'));


推荐阅读