for i of foo 正在返回额外的键?

发布于 2024-11-30 01:36:17 字数 104 浏览 0 评论 0 原文

我在一个包含 3 个对象的数组上调用它。除了这些额外的键之外,它最终还会返回正确的键...... <代码> 独特的 最后的 截短 随机的 包括 包含 任何 为什么

I am calling this on an array with 3 objects in it. It ends up returning the correct keys in addition to these extra keys...

unique
last
truncate
random
include
contains
any

Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

屌丝范 2024-12-07 01:36:17

您之所以获得这些额外的属性,是因为您或您正在使用的库扩展了 Array 原型。正如迈克在他的回答中指出的那样,您可以使用 hasOwnProperty 跳过这些内容。事实上,CoffeeScript 有一个内置的 own 关键字可以为您完成此操作:

for own i of foo
  obj = foo[i]
  ...

但是,正如 Mike 在他的回答中指出的那样,通过递增计数器来循环数组比迭代数组更有效。键。为此,您可以使用 CoffeeScript 的 for...in 语法:(

for obj in foo
  ...

如果您还需要循环中的索引,您可以编写 for obj, i in foo .)

You're getting those extra properties because you, or a library you're using, has extended the Array prototype. As Mike points out in his answer, you can skip those by using hasOwnProperty. Indeed, CoffeeScript has an own keyword built in that does this for you:

for own i of foo
  obj = foo[i]
  ...

But, as Mike also points out in his answer, it's more efficient to loop through an array by incrementing a counter rather than iterating over the keys. To do that, you'd use CoffeeScript's for...in syntax:

for obj in foo
  ...

(If you need indices in the loop as well, you can write for obj, i in foo.)

后知后觉 2024-12-07 01:36:17

for (... in ...) 将返回对象原型上的内容。请参阅 JavaScript for...in vs for

最好的解决方案是迭代使用索引循环的数组元素

for (var i = 0, n = arr.length; i < n; ++i) { ... }

这具有获取数字键而不是字符串并可靠地按顺序迭代的优点。

或者,您可以使用 hasOwnProperty 确保您不会从原型中获取密钥。

for (var k in obj) {
  if (!obj.hasOwnProperty(k)) { continue; }
  ...
}

或者如果您担心 hasOwnProperty 被覆盖,则可以使用变体。

或者,您可以使用 enumerable: false ="nofollow noreferrer">Object.defineProperty

for (... in ...) will return things on the object's prototype. See JavaScript for...in vs for

The best solution is to iterate over array elements using an index loop

for (var i = 0, n = arr.length; i < n; ++i) { ... }

This has the benefit of getting a numeric key instead of a string and reliably iterating in order.

Alternatively, you can use hasOwnProperty to make sure you don't get keys from the prototype.

for (var k in obj) {
  if (!obj.hasOwnProperty(k)) { continue; }
  ...
}

or a variation if you're worried about hasOwnProperty being a overridden.

Even more alternatively, you can define these prototype properties as enumerable: false using Object.defineProperty.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文