给定一系列元素,如[" 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
&#13;
//desired output is:
{u: 1, h: 87}
任何读过此内容并且可以帮助我的人都会提前感谢你。
答案 0 :(得分:7)
您的代码无法正常工作的原因是它将属性的值与属性的名称(a
与{{1}进行比较等等。)
假设您确实要删除数组中列出的属性,这就是您所说的但不是您想要的输出所暗示的内容,代码可以是很多更简单,因为4
如果对象没有属性,则为无操作:
delete
&#13;
附注:它通常并不重要,但值得注意的是,在某些JavaScript引擎上的对象上使用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引擎在属性查找时执行的优化。当然,再一次,它通常并不重要......