2.0.0 • Published 3 years ago

jscalpel v2.0.0

Weekly downloads
13
License
MIT
Repository
github
Last release
3 years ago

npm.io

A small feature library that makes it easier to manipulate objects

npm package NPM downloads

Overview

It is tiny but very useful and can help you handle javascript native objects. Data-driven interface development is very common today, we are in the angular, react, vue will encounter a lot of object processing, including set the default value, query, assignment, etc., jscalpel is born for this scene.

jscalpel is little poor, gzip less than 3k, so a library you can use it anytime, anywhere without worrying about anything.

Document

View the document please visit https://tnfe.github.io/jscalpel/

中文文档

Installation

Install using npm

jscalpel

npm install jscalpel --save
yarn add jscalpel --save

Useage

Es6

  import Jscalpel from 'jscalpel'

Include in html

  <script charset="utf-8" src="https://unpkg.com/jscalpel@latest/dist/index.js"></script>

APIS

Code

1. simple pattern

// mock data
var data = {
  status: '0',
  data: {
    response: {
      code: 1,
      msg: 'response msg'
    }
  }
}
// super easy
jscalpel.get(data, 'data.response.code'); // return 1
// deep copy object
jscalpel.toCopy(data) !== data; // return true;
jscalpel.set(data, 'data.response.code', 0);
jscalpel.get(data, 'data.response.code') // return 0;
// bind data
var jscalpelIns = jscalpel({
  target: data
})
jscalpelIns.get('data.response.code') // returned 1;
jscalpelIns.set('data.response.code', 12);
jscalpelIns.set({
  'status': '1'
})
jscalpelIns.get('data.response.code') // returned 12
jscalpelIns.get('status') // returned 1
jscalpelIns.has('data.response.code') // returned true
jscalpelIns.del('data.reponse.code') 
jscalpelIns.get('data.reponse.code') // returned undefined;
jscalpelIns.has('data.reponse.code') // returned false;

2.advanced patterns

const res = {
  data: {
    article: [{
      articleId: 0,
        title: 'jscalpel'
    }]
  },
  response: {
    code: '0',
    msg: 'success'
  }
}
jscalpel({
	target: res,
  path: ['data.article.0', 'response.msg'],
  success:  (article, msg) => {
  	console.log('keys=>array=>output:', article, msg);
  }
})

jscalpel({
	target: res,
  path: 'response.msg',
  success:  (msg) => {
  	console.log('keys=>string=>output:',msg);
  }
});

3.use prefix

jscalpel({
	target: res,
  prefix: 'response',
  path: ['code', 'msg'],
  success:  (code, msg) => {
  	console.log('prefix=>output:', code, msg);
  }
})

4.dynamic path

jscalpel({
  target: res,
  path: () => ['code', 'msg'].map((key) => `response.${key}`),
  success:  (code, msg) => {
  	console.log('dynamic=>output:', code, msg);
  }
})

jscalpel({
	target: res,
  deep: true,
  prefix: 'response',
  path: ['code', 'msg'],
  success:  (code, msg, finalRes, keys) => {
    console.log( finalRes === res);
  	console.log('deep into callback:', code, msg, finalRes, keys);
  }
});

5.use plugins

const logicMap = {
  'code': {
    match: ({value, name}) => value === '0',
    success: ({value, name}) => {
      console.log('logicPlugin', value, name);
    }
  }
}
jscalpel({
  target: res,
  deep: true,
  prefix: 'response',
  path: ['code', 'msg'],
  plugins: [jscalpel.jscalpelType, jscalpel.jscalpelLogic(logicMap)],
  success: (code, msg, finalRes, keys) => {
    console.log( finalRes === res);
  	console.log('deep into callback:', code, msg, finalRes, keys);
  }
})

Related projects

jscalpel-orm

It is convenient for you to extract the required fields from one object to generate another object.

Changelog

2017.9.14

Add jscalpelLogic plugin, reduce ifelse, make run logic configurable

2018.3.08

add orm

2018.9.04

add get method

import { get } from 'jscalpel';
// get(data, path ,defaultValue);

2018.12.30

import { set, get, toCopy } from 'jscalpel';
// deep copy object
toCopy(data) !== data; // return true;
// set path value
set(data, 'data.response.code', 0);
get(data, 'data.response.code') // return 0;

2021.8.31

publish 2.0.0

License

The MIT License.

2.0.0

3 years ago

1.5.0

5 years ago

1.4.2

5 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.4

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.6.2

7 years ago

0.6.1

7 years ago

0.6.0

7 years ago

0.5.1

7 years ago

0.5.0

7 years ago

0.4.3

7 years ago

0.4.2

7 years ago

0.4.1

7 years ago

0.4.0

7 years ago

0.3.5

7 years ago

0.3.4

7 years ago

0.3.3

7 years ago

0.3.2

7 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago