New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

object-property-assigner

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

object-property-assigner

A lightweight (no dependencies) tool to assign deeply nested properties in JS Objects (incl. Arrays)

  • 1.2.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
29K
decreased by-37.28%
Maintainers
1
Weekly downloads
 
Created
Source

Object Property Assigner

Companion package to object-property-extractor

A lightweight (no dependencies) tool to assign deeply nested values in JS Objects (or Arrays).

Why?

Consider the object

const data = {
  user: {
    name: { first: 'Jango', last: 'Fett' },
    children: ['Boba', 'Clone 1', 'Clone 2', ...etc],
    weapons: [
      { name: 'Blaster', description: 'For shooting stuff' },
      { name: 'Seismic charge', description: '...BWAAAAAANG' },
    ],
  },
  ...otherProperties,
}

In Javascript, you assign inner object properties via dot notation:

data.user.name.last = "Hutt" 

If you want to assign a property dynamically, you can do this:

const key = "user" 
data[key] = { name: "Boba Fett" } // data.user = { name: "Boba Fett" }

However, you can't do this:

const key = "user.name"
data[key] = "Boba Fett"

This tool allows assignation of deep properties using a single "property path" string.

Installation

yarn add object-property-assigner
// OR
npm install object-property-assigner

Usage

Note: function returns a shallow copy of the input, the original object is unmodified

assign( dataObject, propertyString, newValue, { options } ) (See below for options details)

import assign from "object-property-assigner"

// Using the data object above
data = assign(data, "user.name.first", "Boba") // data.user.name.first = "Boba"

data = assign(data, "user.weapons[1].description", "Pew Pew") // data.user.weapons[1].description = "Pew Pew"

Array handling

In addition to accessing array by index (above), if an array consists of objects, then it's possible to assign a single property for all object in the array.

For example:

data = assign(data, "user.weapons.name", "Laser Gun")
// sets *all* user.weapons.name to "Laser Gun"

Options

The (optional) options object can contain any or all of the following parameters:

  • remove -- if true, the property will be deleted rather than assigned (in which case the newValue parameter is ignored)
    assign(data, "user.name.first", null, {remove:true}) // delete user.name.first
    
  • createNew -- (default: true). If a property doesn't exist, it will be created, so set this to false if this behaviour is not desired
    assign(data, "user.kind", "Mandalorian", {createNew: true}) // data.user.kind = "Mandalorian"
    
    Note: for arrays, if an index is specified higher than the current array length, a new item will be created as the next array item, regardless of how much higher the index is. e.g.
    assign( {myArray: [1, 2, 3]}, "myArray[10]", "New Value")
    // --> {myArray: [1, 2, 3, "New Value"]}
    
  • noError -- (default: false). If a property doesn't exist and createNew == false, then an error will be thrown. If you'd rather it just silently ignored the missing property, then set this parameter to true. Note that this is only for errors due to invalid property strings -- other errors might still be thrown.

Testing

A jest test suite is included in the repo. To run: yarn test

See /test/test.ts for the test cases.

Bug report / Feature requests

Please make an issue in the Github repo: https://github.com/CarlosNZ/object-property-assigner

FAQs

Package last updated on 22 Feb 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc