Skip to content

Commit

Permalink
remove {Array#, Array, Dict}.turn, #83
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Jun 18, 2015
1 parent dd85a8b commit 9f444d9
Show file tree
Hide file tree
Showing 22 changed files with 82 additions and 385 deletions.
28 changes: 1 addition & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ core.setImmediate(core.log, 42); // => 42
- [Dict](#dict)
- [Partial application](#partial-application)
- [Date formatting](#date-formatting)
- [Array](#array)
- [Number](#number)
- [Escaping characters](#escaping-characters)
- [delay](#delay)
Expand Down Expand Up @@ -1036,7 +1035,6 @@ Module `core.dict`. Based on [TC39 discuss](https://github.com/rwaldron/tc39-not
.keyOf(object, var) -> key
.includes(object, var) -> bool
.reduce(object, fn(memo, val, key, @), memo?) -> var
.turn(object, fn(memo, val, key, @), memo = new @) -> memo
```
`Dict` create object without prototype from iterable or simple object. [Example](http://goo.gl/pnp8Vr):
```javascript
Expand Down Expand Up @@ -1102,7 +1100,7 @@ Dict.set(O, '__proto__', {w: 2});
O['__proto__']; // => {w: 2}
O['w']; // => undefined
```
Other methods of `Dict` module are static equialents of `Array.prototype` methods for dictionaries, [examples](http://goo.gl/yARYXR):
Other methods of `Dict` module are static equialents of `Array.prototype` methods for dictionaries, [examples](http://goo.gl/xFi1RH):
```javascript
var dict = {a: 1, b: 2, c: 3};

Expand Down Expand Up @@ -1157,13 +1155,6 @@ Dict.reduce(dict, function(memo, it){
Dict.reduce(dict, function(memo, it){
return memo + it;
}, ''); // => '123'

Dict.turn(dict, function(memo, it, key){
memo[key + key] = it;
}); // => {aa: 1, bb: 2, cc: 3}
Dict.turn(dict, function(memo, it, key){
it % 2 && memo.push(key + it);
}, []); // => ['a1', 'c3']
```
### Partial application
Module `core.function.part`.
Expand Down Expand Up @@ -1234,23 +1225,6 @@ new Date().format('M Y'); // => 'Ноябрь 2014'
months: 'Январ:я|ь,Феврал:я|ь,Март:а|,Апрел:я|ь,Ма:я|й,Июн:я|ь,Июл:я|ь,Август:а|,Сентябр:я|ь,Октябр:я|ь,Ноябр:я|ь,Декабр:я|ь'
});
```
### Array
Module `core.array.turn`.
```javascript
Array
#turn(fn(memo, val, index, @), memo = []) -> memo
```
Method `Array#turn` reduce array to object, [example](http://goo.gl/zZbvq7):
```javascript
[1, 2, 3, 4, 5].turn(function(memo, it){
memo['key' + it] = !!(it % 2);
}, {}); // => {key1: true, key2: false, key3: true, key4: false, key5: true}

[1, 2, 3, 4, 5, 6, 7, 8, 9].turn(function(memo, it){
it % 2 && memo.push(it * it);
if(memo.length == 3)return false;
}); // => [1, 9, 25]
```
### Number
Modules `core.number.iterator`.
```javascript
Expand Down
1 change: 0 additions & 1 deletion build/build.ls
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ list = <[
core.delay
core.function.part
core.object
core.array.turn
core.number.iterator
core.string.escape-html
core.date
Expand Down
2 changes: 1 addition & 1 deletion build/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ require('../modules/core.$for');
require('../modules/core.delay');
require('../modules/core.function.part');
require('../modules/core.object');
require('../modules/core.array.turn');
require('../modules/core.number.iterator');
require('../modules/core.string.escape-html');
require('../modules/core.date');
Expand Down
1 change: 0 additions & 1 deletion fn/array/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ require('../../modules/es6.array.find');
require('../../modules/es6.array.find-index');
require('../../modules/es7.array.includes');
require('../../modules/js.array.statics');
require('../../modules/core.array.turn');
module.exports = require('../../modules/$').core.Array;
1 change: 0 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ require('./modules/core.$for');
require('./modules/core.delay');
require('./modules/core.function.part');
require('./modules/core.object');
require('./modules/core.array.turn');
require('./modules/core.number.iterator');
require('./modules/core.string.escape-html');
require('./modules/core.date');
Expand Down
1 change: 0 additions & 1 deletion library/core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ require('../modules/core.$for');
require('../modules/core.delay');
require('../modules/core.function.part');
require('../modules/core.object');
require('../modules/core.array.turn');
require('../modules/core.number.iterator');
require('../modules/core.string.escape-html');
require('../modules/core.date');
Expand Down
1 change: 0 additions & 1 deletion library/fn/array/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ require('../../modules/es6.array.find');
require('../../modules/es6.array.find-index');
require('../../modules/es7.array.includes');
require('../../modules/js.array.statics');
require('../../modules/core.array.turn');
module.exports = require('../../modules/$').core.Array;
1 change: 0 additions & 1 deletion library/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ require('./modules/core.$for');
require('./modules/core.delay');
require('./modules/core.function.part');
require('./modules/core.object');
require('./modules/core.array.turn');
require('./modules/core.number.iterator');
require('./modules/core.string.escape-html');
require('./modules/core.date');
Expand Down
79 changes: 37 additions & 42 deletions library/modules/core.dict.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ var $ = require('./$')
, step = $iter.step
, getKeys = $.getKeys
, toObject = $.toObject
, has = $.has;
, has = $.has
, findKey = createDictMethod(6);

function Dict(iterable){
var dict = $.create(null);
Expand Down Expand Up @@ -88,32 +89,36 @@ function createDictMethod(TYPE){
};
}

// true -> Dict.turn
// false -> Dict.reduce
function createDictReduce(IS_TURN){
return function(object, mapfn, init){
assert.fn(mapfn);
var O = toObject(object)
, keys = getKeys(O)
, length = keys.length
, i = 0
, memo, key, result;
if(IS_TURN){
memo = init == undefined ? new (generic(this, Dict)) : Object(init);
} else if(arguments.length < 3){
assert(length, 'Reduce of empty object with no initial value');
memo = O[keys[i++]];
} else memo = Object(init);
while(length > i)if(has(O, key = keys[i++])){
result = mapfn(memo, O[key], key, object);
if(IS_TURN){
if(result === false)break;
} else memo = result;
}
return memo;
};
function reduce(object, mapfn, init){
assert.fn(mapfn);
var O = toObject(object)
, keys = getKeys(O)
, length = keys.length
, i = 0
, memo, key;
if(arguments.length < 3){
assert(length, 'Reduce of empty object with no initial value');
memo = O[keys[i++]];
} else memo = Object(init);
while(length > i)if(has(O, key = keys[i++])){
memo = mapfn(memo, O[key], key, object);
}
return memo;
}

function includes(object, el){
return (el == el ? keyOf(object, el) : findKey(object, function(it){
return it != it;
})) !== undefined;
}

function get(object, key){
if(has(object, key))return object[key];
}

function isDict(it){
return $.isObject(it) && $.getProto(it) === Dict.prototype;
}
var findKey = createDictMethod(6);

$def($def.G + $def.F, {Dict: Dict});

Expand All @@ -129,21 +134,11 @@ $def($def.S, 'Dict', {
find: createDictMethod(5),
findKey: findKey,
mapPairs: createDictMethod(7),
reduce: createDictReduce(false),
turn: createDictReduce(true),
reduce: reduce,
keyOf: keyOf,
includes: function(object, el){
return (el == el ? keyOf(object, el) : findKey(object, function(it){
return it != it;
})) !== undefined;
},
// Has / get / set own property
has: has,
get: function(object, key){
if(has(object, key))return object[key];
},
set: $.def,
isDict: function(it){
return $.isObject(it) && $.getProto(it) === Dict.prototype;
}
includes: includes,
has: has,
get: get,
set: $.def,
isDict: isDict
});
2 changes: 1 addition & 1 deletion library/modules/js.array.statics.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ function setStatics(keys, length){
setStatics('pop,reverse,shift,keys,values,entries', 1);
setStatics('indexOf,every,some,forEach,map,filter,find,findIndex,includes', 3);
setStatics('join,slice,concat,push,splice,unshift,sort,lastIndexOf,' +
'reduce,reduceRight,copyWithin,fill,turn');
'reduce,reduceRight,copyWithin,fill');
$def($def.S, 'Array', statics);
79 changes: 37 additions & 42 deletions modules/core.dict.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ var $ = require('./$')
, step = $iter.step
, getKeys = $.getKeys
, toObject = $.toObject
, has = $.has;
, has = $.has
, findKey = createDictMethod(6);

function Dict(iterable){
var dict = $.create(null);
Expand Down Expand Up @@ -88,32 +89,36 @@ function createDictMethod(TYPE){
};
}

// true -> Dict.turn
// false -> Dict.reduce
function createDictReduce(IS_TURN){
return function(object, mapfn, init){
assert.fn(mapfn);
var O = toObject(object)
, keys = getKeys(O)
, length = keys.length
, i = 0
, memo, key, result;
if(IS_TURN){
memo = init == undefined ? new (generic(this, Dict)) : Object(init);
} else if(arguments.length < 3){
assert(length, 'Reduce of empty object with no initial value');
memo = O[keys[i++]];
} else memo = Object(init);
while(length > i)if(has(O, key = keys[i++])){
result = mapfn(memo, O[key], key, object);
if(IS_TURN){
if(result === false)break;
} else memo = result;
}
return memo;
};
function reduce(object, mapfn, init){
assert.fn(mapfn);
var O = toObject(object)
, keys = getKeys(O)
, length = keys.length
, i = 0
, memo, key;
if(arguments.length < 3){
assert(length, 'Reduce of empty object with no initial value');
memo = O[keys[i++]];
} else memo = Object(init);
while(length > i)if(has(O, key = keys[i++])){
memo = mapfn(memo, O[key], key, object);
}
return memo;
}

function includes(object, el){
return (el == el ? keyOf(object, el) : findKey(object, function(it){
return it != it;
})) !== undefined;
}

function get(object, key){
if(has(object, key))return object[key];
}

function isDict(it){
return $.isObject(it) && $.getProto(it) === Dict.prototype;
}
var findKey = createDictMethod(6);

$def($def.G + $def.F, {Dict: Dict});

Expand All @@ -129,21 +134,11 @@ $def($def.S, 'Dict', {
find: createDictMethod(5),
findKey: findKey,
mapPairs: createDictMethod(7),
reduce: createDictReduce(false),
turn: createDictReduce(true),
reduce: reduce,
keyOf: keyOf,
includes: function(object, el){
return (el == el ? keyOf(object, el) : findKey(object, function(it){
return it != it;
})) !== undefined;
},
// Has / get / set own property
has: has,
get: function(object, key){
if(has(object, key))return object[key];
},
set: $.def,
isDict: function(it){
return $.isObject(it) && $.getProto(it) === Dict.prototype;
}
includes: includes,
has: has,
get: get,
set: $.def,
isDict: isDict
});
2 changes: 1 addition & 1 deletion modules/js.array.statics.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ function setStatics(keys, length){
setStatics('pop,reverse,shift,keys,values,entries', 1);
setStatics('indexOf,every,some,forEach,map,filter,find,findIndex,includes', 3);
setStatics('join,slice,concat,push,splice,unshift,sort,lastIndexOf,' +
'reduce,reduceRight,copyWithin,fill,turn');
'reduce,reduceRight,copyWithin,fill');
$def($def.S, 'Array', statics);
2 changes: 0 additions & 2 deletions tests/commonjs.ls
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ for P in <[.. ../library]>
ok Array.isArray require("#P/fn/array/of") \q \w \e
ok \next of require("#P/fn/array/values")([])
ok require("#P/fn/array/includes")([1 2 3], 2)
ok require("#P/fn/array/turn")([1, 2, 3], (-> it.q++), {q: 0}).q is 3
ok typeof require("#P/fn/array/concat") is \function
ok typeof require("#P/fn/array/every") is \function
ok typeof require("#P/fn/array/filter") is \function
Expand Down Expand Up @@ -193,7 +192,6 @@ for P in <[.. ../library]>
ok \setImmediate of require("#P/web")
ok typeof require("#P/core/$for") is \function
ok require("#P/core/_")
ok \turn of require("#P/core/array")
ok \format of require("#P/core/date")
ok typeof require("#P/core/delay") is \function
ok typeof require("#P/core/dict") is \function
Expand Down
Loading

0 comments on commit 9f444d9

Please sign in to comment.