Javascript 循环中删除的节点URLSearchParams不';不要删除所有条目

Javascript 循环中删除的节点URLSearchParams不';不要删除所有条目,javascript,node.js,Javascript,Node.js,我有一个目标 URLSearchParams { offset: 'undefined', limit: 'undefined', types: 'undefined' } 我想删除未定义的参数 request.params.forEach((value, name) => { if (value == 'undefined' || typeof value == 'undefined') { request.params.delete(

我有一个目标

URLSearchParams {
    offset: 'undefined',
    limit: 'undefined',
    types: 'undefined'
}

我想删除
未定义的参数

request.params.forEach((value, name) => {
    if (value == 'undefined' || typeof value == 'undefined') {
        request.params.delete(name);
    }
});
console.log(request.params);
我希望所有三个键都应该删除,但是当我记录控制台日志时,它给了我

URLSearchParams { 'limit': 'undefined' }
这只在循环中发生,若我显式删除项,它就可以正常工作

request.params.delete('offset');
request.params.delete('limit');
request.params.delete('types');
console.log(request.params); // gives `URLSearchParams { }` as expected.

删除字段时最好创建一个新对象:

data = {
  offset: undefined,
  limit: undefined,
  types: undefined,
  test: 'abc'
}

filtered_data = {}

Object.keys(data).forEach((key) => {
  let value = data[key]
  if (!(value === 'undefined' || typeof value === 'undefined')) {
    filtered_data[key] = value
  }
})

console.log(filtered_data) // { test: 'abc' }

如@Adiga所述

我最终创建了这个对象的副本

const params = Array.from(request.params);
for (const element of params) {
    const [key, value] = element;
    if (value == 'undefined' || typeof value == 'undefined') {
        request.params.delete(key);
    }
}
console.log(request.params);

这可能是因为您正在从循环体内部操纵要覆盖的对象。您删除了第一个条目
offset
,现在循环是,“好的,这是处理的第一个条目,现在让我们继续处理第二个条目”-只有第二个条目现在已经是
类型了,所以
限制
被跳过。
URLSearchParams.forEach
在最新版本的Chrome中似乎被破坏了,它跳过第一个值。可能存在与此类似的问题:。尝试使用
Array.from(request.params).forEach
@Titus不确定这是否与node.js问题相关。@CBroe它可能也在node中损坏,Chrome是我测试的地方。