Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
The map-visit npm package is designed to map over the properties of an object and apply a function to each property's value. It is particularly useful for manipulating and transforming object properties in a flexible and customizable way.
Mapping over object properties
This feature allows you to iterate over each property of an object and apply a function to its value. In the provided code sample, the function converts each property value to uppercase and logs it along with its key.
const mapVisit = require('map-visit');
const obj = { a: 'foo', b: 'bar' };
mapVisit(obj, (value, key) => console.log(key, value.toUpperCase()));
Similar to map-visit, object-map allows mapping over an object's properties to transform their values. However, object-map returns a new object with the transformed properties, whereas map-visit applies a function for side effects without necessarily returning a result.
map-obj is another package that provides functionality to map keys and values of an object. Unlike map-visit, which is used for applying functions to object properties primarily for side effects, map-obj focuses on transforming the keys and values and returning a new object, which can be useful for more functional programming approaches.
Map
visit
over an array of objects.
Install with npm:
$ npm install --save map-visit
var mapVisit = require('map-visit');
Assign/Merge/Extend vs. Visit
Let's say you want to add a set
method to your application that will:
data
objectdata
objectExample using extend
Here is one way to accomplish this using Lo-Dash's extend
(comparable to Object.assign
):
var _ = require('lodash');
var obj = {
data: {},
set: function (key, value) {
if (Array.isArray(key)) {
_.extend.apply(_, [obj.data].concat(key));
} else if (typeof key === 'object') {
_.extend(obj.data, key);
} else {
obj.data[key] = value;
}
}
};
obj.set('a', 'a');
obj.set([{b: 'b'}, {c: 'c'}]);
obj.set({d: {e: 'f'}});
console.log(obj.data);
//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }}
The above approach works fine for most use cases. However, if you also want to emit an event each time a property is added to the data
object, or you want more control over what happens as the object is extended, a better approach would be to use visit
.
Example using visit
In this approach:
set
, the mapVisit
library calls the set
method on each object in the array.visit
calls set
on each property in the object.As a result, the data
event will be emitted every time a property is added to data
(events are just an example, you can use this approach to perform any necessary logic every time the method is called).
var mapVisit = require('map-visit');
var visit = require('object-visit');
var obj = {
data: {},
set: function (key, value) {
if (Array.isArray(key)) {
mapVisit(obj, 'set', key);
} else if (typeof key === 'object') {
visit(obj, 'set', key);
} else {
// simulate an event-emitter
console.log('emit', key, value);
obj.data[key] = value;
}
}
};
obj.set('a', 'a');
obj.set([{b: 'b'}, {c: 'c'}]);
obj.set({d: {e: 'f'}});
obj.set({g: 'h', i: 'j', k: 'l'});
console.log(obj.data);
//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }, g: 'h', i: 'j', k: 'l'}
// events would look something like:
// emit a a
// emit b b
// emit c c
// emit d { e: 'f' }
// emit g h
// emit i j
// emit k l
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Commits | Contributor |
---|---|
15 | jonschlinkert |
7 | doowb |
(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)
To generate the readme, run the following command:
$ npm install -g verbose/verb#dev verb-generate-readme && verb
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
$ npm install && npm test
Jon Schlinkert
Copyright © 2017, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.5.0, on April 09, 2017.
FAQs
Map `visit` over an array of objects.
We found that map-visit demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
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.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.