assign-where

2.0.1 • Public • Published

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-/>,
  document.getElementById('root')
);
 
document.querySelector('[data-test]']); // Works

Notes

NPM commands

Tests

npm test

Dev

npm run dev

Build

npm run build

Readme

Keywords

Package Sidebar

Install

npm i assign-where

Weekly Downloads

0

Version

2.0.1

License

ISC

Last publish

Collaborators

  • ashcoolman