W3C home > Mailing lists > Public > www-dom@w3.org > October to December 2011

Re: toArray() method for array-like DOM list objects

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Thu, 22 Dec 2011 14:05:46 -0500
Message-ID: <4EF37F8A.60503@mit.edu>
To: "Marat Tanalin | tanalin.com" <mtanalin@yandex.ru>
CC: www-dom@w3.org
On 12/22/11 1:51 PM, Marat Tanalin | tanalin.com wrote:
> At least since it uses some function with dummy argument

What dummy argument?

> to do something that slice function is not intended to

The slice function is purposefully generic.  That means it's intended to 
take any array-like as |this| and produce an array.

> and that purpose is no-so-clear from the script code.

That's a reasonable complaint.

> There was also information from jQuery developers (cannot find a link unfortunately) that this method works even slower that manual iterating item-by-item.

That would simply be an implementation bug.  One which toArray may well 
share if it were implemented.

I have seen no such bug reports from jquery developers (though there 
were recent changes to Spidermonkey's slice() implementation to make it 
much faster on nodelists, when someone else complained about it), so 
either it wasn't a big issue for them or they for some reason didn't 
decide to report it.

> toArray() would be much more clear, straightforward, and fast way to achieve exactly converting DOM list to Array.

I'm almost willing to buy "clear" and "straightforward".  Except that it 
would only work for some objects but not others, whereas slice() works 
for any array-like.  So you'd have to know exactly what sort of object 
you have to use it; in practice this would be a huge pain I suspect.

A much better API, if it could be done, would be an Array constructor 
taking an arraylike object...  But that would need to be done in 
ECMAScript, of course.

As for "fast", that's a matter of implementation as I said above. 
Nothing makes things magically fast; they end up fast when someone makes 
sure to write fast code.

-Boris
Received on Thursday, 22 December 2011 19:06:15 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 22 June 2012 06:14:08 GMT