@jdeighan/coffee-utils 8.0.1 → 8.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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)];
|