Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion somewhat OT: creating a lookup hash in JS
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Ted Young  
View profile  
 More options Oct 30 2012, 7:35 pm
From: Ted Young <t...@radicaldesigns.org>
Date: Tue, 30 Oct 2012 16:35:43 -0700
Local: Tues, Oct 30 2012 7:35 pm
Subject: Re: [nodejs] Re: somewhat OT: creating a lookup hash in JS

var MAX = 1000000;
var arr = [], obj = {}, obj2 = {},foo, start;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

start = Date.now();
arr.reduce(function(obj2,i){
    obj2[i] = true;
    return obj2;
},obj2);

console.log('reduce',Date.now() - start);

start = Date.now();
arr.forEach(function(i){
    obj[i] = true;

});

console.log('forEach',Date.now() - start);
var MAX = 1000000;
var arr = [], obj = {}, obj2 = {},foo, start;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

start = Date.now();
arr.reduce(function(obj2,i){
    obj2[i] = true;
    return obj2;
},obj2);

console.log('reduce',Date.now() - start);

start = Date.now();
arr.forEach(function(i){
    obj[i] = true;

});

console.log('forEach',Date.now() - start);
var MAX = 1000000;
var arr = [], obj = {}, obj2 = {},foo, start;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

start = Date.now();
arr.reduce(function(obj2,i){
    obj2[i] = true;
    return obj2;
},obj2);

console.log('reduce',Date.now() - start);

start = Date.now();
arr.forEach(function(i){
    obj[i] = true;

});

console.log('forEach',Date.now() - start);
A quick speed test, comparing forEach and reduce:

var arr = [], obj = {}, obj2 = {}, start;
var MAX = 1000000;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

// test reduce
start = Date.now();
arr.reduce(function(obj,i){
    obj[i] = true;
    return obj;
},obj);

console.log('reduce',Date.now() - start);

// test forEach
start = Date.now();
arr.forEach(function(i){
    obj2[i] = true;

});

console.log('forEach',Date.now() - start);
var MAX = 1000000;
var arr = [], obj = {}, obj2 = {},foo, start;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

start = Date.now();
arr.reduce(function(obj2,i){
    obj2[i] = true;
    return obj2;
},obj2);

console.log('reduce',Date.now() - start);

start = Date.now();
arr.forEach(function(i){
    obj[i] = true;

});

console.log('forEach',Date.now() - start);
var MAX = 1000000;
var arr = [], obj = {}, obj2 = {},foo, start;

for(i = 0; i < MAX; i++){
  arr.push(i.toString());

}

start = Date.now();
arr.reduce(function(obj2,i){
    obj2[i] = true;
    return obj2;
},obj2);

console.log('reduce',Date.now() - start);

start = Date.now();
arr.forEach(function(i){
    obj[i] = true;

});

console.log('forEach',Date.now() - start);

results are:

in node:
reduce 169
forEach 147

in node if you reverse the order:
forEach 170
reduce 145

in firefox:
reduce 956
forEach 1906

reversed in firefox:
forEach 2057
reduce 944

If this is for the browser, reduce seems twice as fast in firefox.  In node they appear equivalent.

forEach is about as concise as it gets, but hey, one line of code ain't bad. :)

Ted

On Oct 30, 2012, at 3:36 PM, Felipe Mobus <fmo...@gmail.com> wrote:

> You could use ES5's array.reduce() method, but it's gonna be a bit ugly

> [1,2,3,4,5,6,7,8].reduce(function(prev, cur) {
>  prev[cur] = (cur % 2) == 0;
>  return prev;
> }, {})

> On Tue, Oct 30, 2012 at 8:25 PM, mscdex <msc...@gmail.com> wrote:
>> On Oct 30, 5:50 pm, Felipe Gasper <fel...@felipegasper.com> wrote:
>>> Anything of the sort coming in JS, does anyone know? Maybe in some of
>>> the newer ES5 goodies?

>> Does this help?: https://github.com/joyent/node/wiki/ECMA-5-Mozilla-Features-Implement...

>> --
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to nodejs@googlegroups.com
>> To unsubscribe from this group, send email to
>> nodejs+unsubscribe@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en

> --
> Felipe Mobus
> http://fmobus.wait4.org

> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscribe@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.