在Object.keys(obj).forEach(function(index)

时间:2016-06-18 16:52:22

标签: javascript node.js

在node.js中执行类似的操作是否可以:

Object.keys(obj).forEach(function(index) { 
   if (index == 'sth')
      obj.splice(obj.indexOf(index), 1);
}

我想知道如果脚本是由许多写入/写入obj对象的客户端执行的,那么这个拼接是否会完成预期的事情。

1 个答案:

答案 0 :(得分:2)

  

obj确实是一个对象,索引可以是一个字母数字值。因此,splice不能在对象中工作,而应该使用delete。同样的问题,是否可以在对象的foreach中使用delete?

forEach上没有obj。 (你不能,forEach仅为类似数组的东西定义。)你通过查找{{1}的所有可枚举属性创建的数组forEach通过obj

让我们看一下上面描述的更改并修正语法错误的代码:

Object.keys

当然,您可以从Object.keys(obj).forEach(function(key) { if (key == 'sth') delete obj[key]; }); 中删除数组obj回调中的forEach内的属性。它对您正在循环的阵列完全没有影响。

旁注:在对象上使用Object.keys时,在V8(JavaScript引擎NodeJS使用)和其他一些对象上,它会显着降低以后查找该对象属性的性能,因为它来自优化版本为"词典模式"版。当然,这只有在您将对象识别为性能问题的根源时才有意义;在那之前,删除...: - )