1.1.1 • Published 5 years ago

nebulw v1.1.1

Weekly downloads
2
License
BSD-3-Clause
Repository
github
Last release
5 years ago

Nebulw

A library for safe get/set nested attributes of JavaScript.

这是一个用于安全获取/设置javascrpt对象/数组中深层次的属性/元素的库。

这个库的特色就是将表达式解析成抽象语法树,再进行求值或赋值。 主要是为了学习和好玩,性能待测试。

使用方式

npm install --save nebulw
import nebulw from 'nebulw'

// 或单独导出
import {safeGet,safeGets,compile,safeSet,safeSets} from 'nebulw'

let obj = {
        a: 2,
        b: {
          c: 1,
          d: [
            {
              f: [1, [2, 3]],
              g: {
                h: 2
              }
            }
          ]
        }
      }

// get

nebulw.safeGet(obj,"b.d[0]f[1][0]") // 2

// 预编译表达式
nebulw.safeGet(obj,nebulw.compile("b.d[0]f[1][0]")) //2

// 一次计算多个表达式
nebulw.safeGets(obj,"b.c","b.d[0]f[1][0]","b.d[0].g.h") // [1,2,2]

// set

nebulw.safeSet(obj,"b.c",4) // obj.b.c will be set to 4

nebulw.safeSet({},"b.c",4) // {b:{c:4}}

nebulw.safeSet({},"b.c[0]",4)) // {b:{c:[4]}}

nebulw.safeSets({},["b.c",1],["b.d[1]",2],["b.d[0][0]",3]) // {b:{c:1,d:[[3],2]}}

// more test see test.js

测试

npm run test

功能列表

  • safeGet
  • safeSet

特性

  1. 支持d0f1这种情形,即两个连续调用在不影响语义的情况下可以省略"."。
  2. 多个连续的"."会被当作一个,如 b..c 等价于 b.c 。

性能对比

使用表格中的库对每个表达式/路径执行100000次的结果,结果仅表示相对大小,在不同环境下运行结果会不一样。

Get:

表达式nebulwnebulw with precompileshvll-safeget
b.c95ms13ms16ms227ms
b.d0f1166ms11msNot Support328ms
b.d0.g.h134ms9msNot Support259ms

Set:

表达式nebulwnebulw with precompileshvl
b.c201ms51ms78ms
b.d0f1705ms257msNot Support
b.d0.g.h541ms145msNot Support
1.1.1

5 years ago

1.1.0

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago