Не могли бы вы определить, каким будет ожидаемое поведение?
Согласно документации , stringify()
преобразует объект в запрос. Поскольку вы передаете ids
, массив элементов, возможны различные варианты поведения.
Обратите внимание, что в javascript массив - это объект с числами в качестве ключей, поэтому [ { id: '123' }, { id: '456' } ]
на самом деле выглядит как { '0': { 'id': '123' }, '1': { 'id': '456' } }
(взгляните на Object.keys
массива, вы увидите, что он ['0','1']
).
Итак, как говорится, то, что делает queryString, конвертирует каждую пару ключ-значение в key=value
, где оба key
и values
были "преобразованы в строку" (я предполагаю, через конструктор String). Поскольку значение является объектом, оно возвращает то, что вы видите (на самом деле, String({})
- это [object Object]
. Поэтому я ожидаю (и я действительно получаю) от строковой классификации массива объектов, что-то вроде 0=[object Object]&1=[object Object]
(с квадратными скобками, преобразованными в %5B
и %5D
и пробелами в %20
).
Я на самом деле не знаю, откуда взялась questionId
, поэтому следует предоставить немного больше контекста (например, показывать, что фактический объект может быть полезен), но, чтобы добраться до сути, чтобы избежать чтобы ваш объект был преобразован в [object Object]
, вы должны использовать ключевой экстрактор, который возвращает значение, которое вы на самом деле хотите отобразить как значение.
Так, например, если ваш массив такой, как описано выше, и результат, который вы хотите получить, равен 0=123&1=456
, вы должны сделать что-то вроде:
const ids = [ {id: '123'}, {id: '456'} ];
queryString.stringify(ids.map(v => v.id))
Вместо этого, если ожидаемое поведение id=123&id=456
, вам необходимо преобразовать массив в объект { id: ['123','456'] }
. Вы можете сделать это с помощью следующего
const ids = [ {id: '123'}, {id: '456'} ];
queryString.stringify({ id: ids.reduce( (c,v) => c.concat(v.id), []) })
Итак, вам нужно преобразовать исходный массив ids
в объект, который подходит для stringify
.