From 8ad277259a049b8c8c76287ab8fcd7c69a0abcde Mon Sep 17 00:00:00 2001 From: bekzod Date: Tue, 5 Jun 2018 13:48:27 +0500 Subject: [PATCH 1/3] small cleanup mixins/array --- packages/ember-runtime/lib/mixins/array.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/ember-runtime/lib/mixins/array.js b/packages/ember-runtime/lib/mixins/array.js index 5583e86ad19..9bef932b34b 100644 --- a/packages/ember-runtime/lib/mixins/array.js +++ b/packages/ember-runtime/lib/mixins/array.js @@ -4,9 +4,8 @@ import { ARRAY_AT_EACH } from '@ember/deprecated-features'; import { DEBUG } from '@glimmer/env'; -import { HAS_NATIVE_PROXY } from 'ember-utils'; import { PROXY_CONTENT } from 'ember-metal'; -import { symbol, toString } from 'ember-utils'; +import { symbol, toString, HAS_NATIVE_PROXY } from 'ember-utils'; import { get, set, @@ -146,10 +145,7 @@ export function isArray(_obj) { if (!obj || obj.setInterval) { return false; } - if (Array.isArray(obj)) { - return true; - } - if (ArrayMixin.detect(obj)) { + if (Array.isArray(obj) || ArrayMixin.detect(obj)) { return true; } @@ -1172,17 +1168,12 @@ const ArrayMixin = Mixin.create(Enumerable, { const OUT_OF_RANGE_EXCEPTION = 'Index out of range'; -export function removeAt(array, start, len) { +export function removeAt(array, start, len = 1) { if ('number' === typeof start) { if (start < 0 || start >= array.length) { throw new EmberError(OUT_OF_RANGE_EXCEPTION); } - // fast case - if (len === undefined) { - len = 1; - } - array.replace(start, len, EMPTY_ARRAY); } From bee179dd13aed55522668d7526e77220fe8f12ed Mon Sep 17 00:00:00 2001 From: bekzod Date: Tue, 5 Jun 2018 13:59:55 +0500 Subject: [PATCH 2/3] use `tryInvoke` in `ArrayMixin.invoke` --- packages/ember-runtime/lib/mixins/array.js | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/packages/ember-runtime/lib/mixins/array.js b/packages/ember-runtime/lib/mixins/array.js index 9bef932b34b..ec4b40c8a6e 100644 --- a/packages/ember-runtime/lib/mixins/array.js +++ b/packages/ember-runtime/lib/mixins/array.js @@ -5,7 +5,7 @@ import { ARRAY_AT_EACH } from '@ember/deprecated-features'; import { DEBUG } from '@glimmer/env'; import { PROXY_CONTENT } from 'ember-metal'; -import { symbol, toString, HAS_NATIVE_PROXY } from 'ember-utils'; +import { symbol, toString, HAS_NATIVE_PROXY, tryInvoke } from 'ember-utils'; import { get, set, @@ -782,7 +782,7 @@ const ArrayMixin = Mixin.create(Enumerable, { @public */ findBy() { - return this.find(iter(...arguments)); + return find(this, iter(...arguments)); }, /** @@ -841,7 +841,7 @@ const ArrayMixin = Mixin.create(Enumerable, { @public */ isEvery() { - return this.every(iter(...arguments)); + return every(this, iter(...arguments)); }, /** @@ -899,7 +899,7 @@ const ArrayMixin = Mixin.create(Enumerable, { @public */ isAny() { - return this.any(iter(...arguments)); + return any(this, iter(...arguments)); }, /** @@ -960,17 +960,7 @@ const ArrayMixin = Mixin.create(Enumerable, { @public */ invoke(methodName, ...args) { - let ret = A(); - - this.forEach((x, idx) => { - let method = x && x[methodName]; - - if ('function' === typeof method) { - ret[idx] = args.length ? method.apply(x, args) : x[methodName](); - } - }, this); - - return ret; + return this.map((item) => tryInvoke(item, methodName, args)); }, /** From 8d5d7601395fd42fa0e8a262a74eb93e647f6cd8 Mon Sep 17 00:00:00 2001 From: bekzod Date: Tue, 5 Jun 2018 19:22:13 +0500 Subject: [PATCH 3/3] remove redundant argument `reducerProperty` --- packages/ember-runtime/lib/mixins/array.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/ember-runtime/lib/mixins/array.js b/packages/ember-runtime/lib/mixins/array.js index ec4b40c8a6e..46fb411b8af 100644 --- a/packages/ember-runtime/lib/mixins/array.js +++ b/packages/ember-runtime/lib/mixins/array.js @@ -932,17 +932,16 @@ const ArrayMixin = Mixin.create(Enumerable, { @method reduce @param {Function} callback The callback to execute @param {Object} initialValue Initial value for the reduce - @param {String} reducerProperty internal use only. @return {Object} The reduced value. @public */ - reduce(callback, initialValue, reducerProperty) { + reduce(callback, initialValue) { assert('`reduce` expects a function as first argument.', typeof callback === 'function'); let ret = initialValue; this.forEach(function(item, i) { - ret = callback(ret, item, i, this, reducerProperty); + ret = callback(ret, item, i, this); }, this); return ret; @@ -960,7 +959,7 @@ const ArrayMixin = Mixin.create(Enumerable, { @public */ invoke(methodName, ...args) { - return this.map((item) => tryInvoke(item, methodName, args)); + return this.map(item => tryInvoke(item, methodName, args)); }, /**