Merge pull request #233 from chaoflow/master

make toArray return a clone in case of an array
This commit is contained in:
Jeremy Ashkenas
2011-07-06 13:35:54 -07:00
3 changed files with 23 additions and 19 deletions

View File

@@ -41,7 +41,7 @@ $(document).ready(function() {
var doubled = _([1, 2, 3]).map(function(num){ return num * 2; }); var doubled = _([1, 2, 3]).map(function(num){ return num * 2; });
equals(doubled.join(', '), '2, 4, 6', 'OO-style doubled numbers'); equals(doubled.join(', '), '2, 4, 6', 'OO-style doubled numbers');
var ids = _.map(document.body.childNodes, function(n){ return n.id; }); var ids = _.map($('div.underscore-test').children(), function(n){ return n.id; });
ok(_.include(ids, 'qunit-header'), 'can use collection methods on NodeLists'); ok(_.include(ids, 'qunit-header'), 'can use collection methods on NodeLists');
var ids = _.map(document.images, function(n){ return n.id; }); var ids = _.map(document.images, function(n){ return n.id; });
@@ -197,6 +197,9 @@ $(document).ready(function() {
test('collections: toArray', function() { test('collections: toArray', function() {
ok(!_.isArray(arguments), 'arguments object is not an array'); ok(!_.isArray(arguments), 'arguments object is not an array');
ok(_.isArray(_.toArray(arguments)), 'arguments object converted into array'); ok(_.isArray(_.toArray(arguments)), 'arguments object converted into array');
var a = [1,2,3];
ok(_.toArray(a) !== a, 'array is cloned');
equals(_.toArray(a).join(', '), '1, 2, 3', 'cloned array contains same elements');
var numbers = _.toArray({one : 1, two : 2, three : 3}); var numbers = _.toArray({one : 1, two : 2, three : 3});
equals(numbers.join(', '), '1, 2, 3', 'object flattened into array'); equals(numbers.join(', '), '1, 2, 3', 'object flattened into array');

View File

@@ -16,26 +16,27 @@
<script type="text/javascript" src="speed.js"></script> <script type="text/javascript" src="speed.js"></script>
</head> </head>
<body> <body>
<h1 id="qunit-header">Underscore Test Suite</h1> <div class="underscore-test">
<h2 id="qunit-banner"></h2> <h1 id="qunit-header">Underscore Test Suite</h1>
<h2 id="qunit-userAgent"></h2> <h2 id="qunit-banner"></h2>
<ol id="qunit-tests"></ol> <h2 id="qunit-userAgent"></h2>
<br /> <ol id="qunit-tests"></ol>
<h1 class="qunit-header">Underscore Speed Suite</h1> <br />
<p> <h1 class="qunit-header">Underscore Speed Suite</h1>
A representative sample of the functions are benchmarked here, to provide <p>
a sense of how fast they might run in different browsers. A representative sample of the functions are benchmarked here, to provide
Each iteration runs on an array of 1000 elements.<br /><br /> a sense of how fast they might run in different browsers.
For example, the 'intersect' test measures the number of times you can Each iteration runs on an array of 1000 elements.<br /><br />
find the intersection of two thousand-element arrays in one second. For example, the 'intersect' test measures the number of times you can
</p> find the intersection of two thousand-element arrays in one second.
<br /> </p>
<br />
<script type="text/html" id="template"> <script type="text/html" id="template">
<% <%
if (data) { data += 12345; }; %> if (data) { data += 12345; }; %>
<li><%= data %></li> <li><%= data %></li>
</script> </script>
</div>
</body> </body>
</html> </html>

View File

@@ -278,7 +278,7 @@
_.toArray = function(iterable) { _.toArray = function(iterable) {
if (!iterable) return []; if (!iterable) return [];
if (iterable.toArray) return iterable.toArray(); if (iterable.toArray) return iterable.toArray();
if (_.isArray(iterable)) return iterable; if (_.isArray(iterable)) return slice.call(iterable);
if (_.isArguments(iterable)) return slice.call(iterable); if (_.isArguments(iterable)) return slice.call(iterable);
return _.values(iterable); return _.values(iterable);
}; };