2016-11-03 1 views
1

Я только что нашел John Resig's Array.remove() функция. [Похоже, что его сайт неправильно разбирает bb-код, поэтому его трудно прочитать!]Javascript Array.remove() от John Resig - почему он перечисляет в for-in утверждение?

Хотя это изящно, проблема в том, что метод remove() перечисляет в инструкции for-in для каждого массива после загрузки его кода.

Например, после того, как предваряя свой код, сделайте следующее:

var a = ["a", "b", "c"]; 
for (i in a) 
{ 
    console.log(i); 
} 

И вы получите:

0 
1 
2 
remove 

Почему не все другие встроенные свойства и методы объекта Array, перечислять, и есть ли способ предотвратить это для метода remove()?

Here's a jsfiddle...

+0

Обратите внимание, что этот пост в блоге - почти 9 лет назад. Это древний; как правило, не обращайте внимания на что-либо о JavaScript из этого давно, пока не получите подтверждение, что это все еще актуально. – Pointy

+0

@Pointy, теперь есть лучший способ удалить элементы массива? –

+0

Код неплохой, но дело в том, что за последние 9 лет многое изменилось. Г-н Ресиг не стал бы писать этот код так же, как сейчас, я бы поспорил. – Pointy

ответ

2

Вы можете использовать Object.defineProperty() добавить метод:

Object.defineProperty(Array.prototype, "remove", { 
    value: function() { ... } 
}); 

Это будет по умолчанию оставить «перечислим» флаг оказался от для свойства, а это означает, что он не будет отображаться вверх в for ... in петлях.

+0

Это именно тот ответ, который я искал. Благодаря! Серьезно, если вы знаете лучшую/рекомендуемую функцию «удалить», я бы с удовольствием узнал об этом. Странно, что эта функция еще не добавлена ​​в JS - это довольно очевидный и общий, я бы подумал. –

+0

Вот обновленная скрипка, показывающая, что она работает: https://jsfiddle.net/dghm4mrL/1/ –

+0

https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/ –