Skip to content

Commit

Permalink
make map and asyncMap generate an object if initially given an object…
Browse files Browse the repository at this point in the history
… (rather than always generating an array
  • Loading branch information
marcuswestin committed May 13, 2013
1 parent bb2e781 commit b235fd8
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 22 deletions.
3 changes: 1 addition & 2 deletions asyncMap.js
Expand Up @@ -2,8 +2,7 @@ var asyncEach = require('std/asyncEach')
var isList = require('std/isList')

module.exports = function asyncMap(items, opts) {
var result = []
result.length = isList(items) ? items.length : Object.keys(items).length
var result = isList(items) ? new Array(items.length) : {}
var includeNullValues = !opts.filterNulls
var context = opts.context || this

Expand Down
15 changes: 5 additions & 10 deletions each.js
@@ -1,20 +1,15 @@
var isArray = require('./isArray'),
isArguments = require('./isArguments')
var isList = require('./isList')

module.exports = function(items, ctx, fn) {
module.exports = function each(items, fn) {
if (!items) { return }
if (!fn) {
fn = ctx
ctx = this
}
if (isArray(items) || isArguments(items)) {
if (isList(items)) {
for (var i=0; i < items.length; i++) {
fn.call(ctx, items[i], i)
fn(items[i], i)
}
} else {
for (var key in items) {
if (!items.hasOwnProperty(key)) { continue }
fn.call(ctx, items[key], key)
fn(items[key], key)
}
}
}
2 changes: 1 addition & 1 deletion first.js
@@ -1,3 +1,3 @@
module.exports = function first(arr) {
return arr[0]
return arr ? arr[0] : null
}
13 changes: 5 additions & 8 deletions map.js
@@ -1,13 +1,10 @@
var each = require('./each')
var isList = require('./isList')

module.exports = function(items, ctx, fn) {
var result = []
if (!fn) {
fn = ctx
ctx = this
}
each(items, ctx, function(item, key) {
result.push(fn.call(ctx, item, key))
module.exports = function map(obj, fn) {
var result = isList(obj) ? new Array(obj.length) : {}
each(obj, function(val, key) {
result[key] = fn(val, key)
})
return result
}
11 changes: 11 additions & 0 deletions toArray.js
@@ -0,0 +1,11 @@
var identity = require('./identity')
var each = require('./each')

module.exports = function toArray(obj, fn) {
if (!fn) { fn = identity }
var result = []
each(obj, function(val, key) {
result.push(fn(val, key))
})
return result
}
3 changes: 2 additions & 1 deletion url.js
@@ -1,5 +1,6 @@
var Class = require('./Class')
var map = require('./map')
var toArray = require('./toArray')
var isArray = require('std/isArray')

var URL = Class(function() {
Expand Down Expand Up @@ -96,7 +97,7 @@ url.query = {
return params
},
string:function(params) {
return map(params, function(val, key) {
return toArray(params, function(val, key) {
return encodeURIComponent(key) + '=' + url.query.encodeValue(val)
}).join('&')
},
Expand Down

0 comments on commit b235fd8

Please sign in to comment.