1.0.4 • Published 7 years ago

@kingjs/linq.default-select-id v1.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
7 years ago

@kingjs/linq.default-selectId

Default id selector; Identity operator.

Usage

Id selectors are used to identify objects when the default string conversion is insufficient. For example, implement a function remove duplicates from an array like this:

var defaultSelectId = require('@kingjs/linq.default-select-id');

function removeDuplicates(array, selectId) {
  var result = [];

  if (!selectId)
    selectId = defaultSelectId;

  var visited = { };
  for (var i = 0; i < array.length; i ++) {
    var value = array[i];

    var id = selectId(value);
    if (id in visited)
      continue;
    visited[id] = undefined;

    result.push(value);
  }

  return result;
}

This can be used to remove the duplicate 'Alice' record when records are:

  • strings and default string conversion is sufficient
  • objects with a name property and an idSelector is necessary

For example:

{
  asStrings: removeDuplicates([
    'Alice',
    'Alice',
    'Bob',
  ]),

  asObjects: removeDuplicates([
    { name: 'Alice' },
    { name: 'Alice' },
    { name: 'Bob' },
  ], function(x) { // without this, de-dup fails
    return x.name; 
  }),
}

result:

{
  asStrings: [ 
    'Alice', 
    'Bob' 
  ],
  asObjects: [
    { name: 'Alice' },
    { name: 'Bob' }
  ],
}

API

function defaultIdSelector(x: any): any

Parameters

  • x: The object whose id is to be selected.

Result

A value whose string representation identifies the object.

Remarks

LINQ set algorithms like union and except need to identify objects and so adopt the selectId pattern.

More Remarks

In C# all objects implement .GetHashCode and .Equals enabling any object can be used as the key to a dictionary.

In Javascript only strings may be used as keys. As such, an object used as a key to a dictionary needs to be converted to a string. When the default conversion may not suitable for this purpose, functions should allow callers to pass an idSelector.

Install

With npm installed, run

$ npm install @kingjs/link.default-equal

License

MIT