@jdeighan/coffee-utils 8.0.1 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/coffee_utils.coffee +20 -0
- package/src/coffee_utils.js +28 -0
package/package.json
CHANGED
package/src/coffee_utils.coffee
CHANGED
@@ -296,6 +296,26 @@ export isUniqueList = (lItems, func=undef) ->
|
|
296
296
|
|
297
297
|
# ---------------------------------------------------------------------------
|
298
298
|
|
299
|
+
export isUniqueTree = (lItems, func=undef, hFound={}) ->
|
300
|
+
|
301
|
+
if isEmpty(lItems)
|
302
|
+
return true # empty list is unique
|
303
|
+
if defined(func)
|
304
|
+
assert isFunction(func), "Not a function: #{OL(func)}"
|
305
|
+
for item in lItems
|
306
|
+
if isArray(item)
|
307
|
+
if ! isUniqueTree(item, func, hFound)
|
308
|
+
return false
|
309
|
+
else
|
310
|
+
if defined(func) && !func(item)
|
311
|
+
return false
|
312
|
+
if defined(hFound[item])
|
313
|
+
return false
|
314
|
+
hFound[item] = 1
|
315
|
+
return true
|
316
|
+
|
317
|
+
# ---------------------------------------------------------------------------
|
318
|
+
|
299
319
|
export uniq = (lItems) ->
|
300
320
|
|
301
321
|
return [...new Set(lItems)]
|
package/src/coffee_utils.js
CHANGED
@@ -303,6 +303,34 @@ export var isUniqueList = function(lItems, func = undef) {
|
|
303
303
|
return true;
|
304
304
|
};
|
305
305
|
|
306
|
+
// ---------------------------------------------------------------------------
|
307
|
+
export var isUniqueTree = function(lItems, func = undef, hFound = {}) {
|
308
|
+
var i, item, len;
|
309
|
+
if (isEmpty(lItems)) {
|
310
|
+
return true; // empty list is unique
|
311
|
+
}
|
312
|
+
if (defined(func)) {
|
313
|
+
assert(isFunction(func), `Not a function: ${OL(func)}`);
|
314
|
+
}
|
315
|
+
for (i = 0, len = lItems.length; i < len; i++) {
|
316
|
+
item = lItems[i];
|
317
|
+
if (isArray(item)) {
|
318
|
+
if (!isUniqueTree(item, func, hFound)) {
|
319
|
+
return false;
|
320
|
+
}
|
321
|
+
} else {
|
322
|
+
if (defined(func) && !func(item)) {
|
323
|
+
return false;
|
324
|
+
}
|
325
|
+
if (defined(hFound[item])) {
|
326
|
+
return false;
|
327
|
+
}
|
328
|
+
hFound[item] = 1;
|
329
|
+
}
|
330
|
+
}
|
331
|
+
return true;
|
332
|
+
};
|
333
|
+
|
306
334
|
// ---------------------------------------------------------------------------
|
307
335
|
export var uniq = function(lItems) {
|
308
336
|
return [...new Set(lItems)];
|