Giter VIP home page Giter VIP logo

assign-where's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.