2.0.1 • Published 7 years ago

assign-where v2.0.1

Weekly downloads
3
License
ISC
Repository
github
Last release
7 years ago

assign-where

Like Object.assign, but key/value assigning is determined by a predicate function

Coverage Status

Installation

npm install assign-where --save

API

assignWhere( predicate, target, [sources]);

Arguments:

  • predicate (function): Takes an array [key, value], and returns bool, This determins if each enumerable key/value should be assigned to target
  • target (enumerable): The value to be assigned onto (to be mutated)
  • [sources] (enumerables): The source values

NOTE: Like Object.assign, assignWhere will attempted to coerce target and sources to objects

Examples

On key

import assignWhere from 'assign-where';

const target = { existing: 'here'};

const output = assignWhere(
  ([key, value]) => key.startsWith('a'),
  target,
  { apple: 'Manzana'},
  { bannana: 'Banano'},
  { crab: 'crangrejo'}
);

console.log(output);
// { existing: "here", apple: "Manzana" }

console.log(target === output);
// true

On value

import assignWhere from 'assign-where';

const target = { existing: 'here'};

const output = assignWhere(
  ([key, value]) => value.endsWith('o'),
  target,
  { apple: 'Manzana'},
  { bannana: 'Banano'},
  { crab: 'crangrejo'}
);

console.log(output);
// { existing: "here", bannana: "Banano", crab: "crangrejo" }

console.log(target === output);
// true

Alternative

Use in-built functions

let target = { existing: 'here'};

Object
  .entries(
    Object.assign(
      { apple: 'Manzana'},
      { bannana: 'Banano'},
      { crab: 'crangrejo'}
    )
  ).filter(
    ([key, value]) => value.endsWith('o')
  ).forEach(
    ([key, value]) => target[key] = value
  );

console.log(target);
// { existing: "here", bannana: "Banano", crab: "crangrejo" }

Why?

The initial use case was in React, wanting to examine a Component's props and find all the custom data attributes data-.

const dataAttr = ([k,v]) => k.startsWith('data-')
const MyComp = props =>
  <div
    {...assignWhere(dataAttr, props)}
  >
    <h1>{props.heading}</h1>
      <p>{props.content}</p>
  </div>

ReactDOM.render(
  <MyComp data-test data-x data-y />,
  document.getElementById('root')
);

document.querySelector('[data-test]']); // Works

Notes

NPM commands

Tests

npm test

Dev

npm run dev

Build

npm run build
2.0.1

7 years ago

2.0.0

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago

0.0.2-dev

7 years ago

0.0.1-dev

7 years ago