Javascript 无法删除对象属性?
我有一个Javascript 无法删除对象属性?,javascript,Javascript,我有一个forEach首先检查属性是否存在,然后删除它。然后,如果未在existingParams中定义该属性,则会使用新值再次将其追加。看起来是这样的: parameters = parameters || {}; let existingParams = this.getUrlParameters(); _.forEach(parameters, function (value, key) { if ((value !== null || typeof valu
forEach
首先检查属性是否存在,然后删除它。然后,如果未在existingParams
中定义该属性,则会使用新值再次将其追加。看起来是这样的:
parameters = parameters || {};
let existingParams = this.getUrlParameters();
_.forEach(parameters, function (value, key) {
if ((value !== null || typeof value !== 'undefined')
&& existingParams.hasOwnProperty(key)
) {
//First console.log
console.log("Deleted!: " + existingParams[key])
delete existingParams[key];
return;
} else if (value === null || typeof value === 'undefined') {
return;
}
//Second console.log
console.log(existingParams);
if ( ! existingParams.hasOwnProperty(key)) {
Object.defineProperty(existingParams, key, {
value: value,
enumerable: true,
configurable: true
});
return;
}
existingParams[key] = value;
});
问题是它从不删除一个参数delete existingParams[key]代码>(第一个if语句)。在第一个console.log中,我看到正在删除正确的参数。但是在第二个console.log中,参数仍然存在
这怎么可能
现有参数例如:{minPrice:“1021”,maxPrice:“2751”,page:1}
参数例如:{minPrice:1301,maxPrice:3081}
你能提供一些参数和现有参数的示例值吗?
?是的,请稍等,因为:我不太明白你的问题。从我看到的情况来看,您想检查parameters
中的键是否位于existingParams
中。如果是,请将其从现有参数中删除。我在JSBin中尝试了这个,您的函数运行正常。对于对象示例,第二个console.log甚至从未被触发。在每次迭代开始时,if/else检查中的return
语句正在停止正在执行的代码的第二部分。您能从更广泛的意义上明确您想要做什么吗?@Jenssen我看不出您需要如何删除该属性-只需用新值覆盖它们。没有delete
,没有Object.defineProperty
,只有一个循环和一个赋值-甚至是微不足道的Object.assign(现有参数、参数)代码>