给定一个元素数组,如 ["a","r","g"] 和一个对象,我试图删除键/值对,其中键是数组的元素。
function shorten(arr, obj) {
var keys = Object.keys(obj); //make an array of the object's keys
for(var i = 0; i < arr.length; i++) //loop for original array (arr)
for(var j = 0; j < keys.length; j++) //loop for "keys" array
if(arr[i] === obj[keys[j]]) //check for array element matches
delete obj[keys[j]]; //delete the matches from object
return obj; //return the new object
}
var arrA = ['a','r', 'g'];
var oB = {a: 4, u: 1, r: 2, h: 87, g: 4};
console.log(shorten(arrA,oB)) //I keep getting the original object
//The function isn't shortening things
//desired output is:
{u: 1, h: 87}
任何阅读本文并能帮助我的人,在此先感谢您。
最佳答案
您的代码无法正常工作的原因是它正在比较属性的值 与属性名称(a
与 4
等) .)
假设您真的想删除数组中列出的属性,这是您所说的,而不是您想要的输出所暗示的,代码可以很多更简单,因为 delete
如果对象没有属性则为空操作:
function shorten(arr, obj) {
arr.forEach(function(key) {
delete obj[key];
});
return obj;
}
var arrA = ['a','r', 'g'];
var oB = {a: 4, u: 1, r: 2, h: 87, g: 4};
console.log(shorten(arrA, oB));
旁注:这通常无关紧要,但值得注意的是,在某些 JavaScript 引擎上对对象使用 delete
会使后续对该对象的属性查找操作慢得多。引擎经过优化以处理正在添加 和更新但未删除的属性。删除属性后,它会禁用某些 JavaScript 引擎对属性查找所做的优化。当然,再一次,这通常并不重要......
关于javascript - 从对象中删除特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42050065/