Socket
Socket
Sign inDemoInstall

complex-data-array-handler

Package Overview
Dependencies
0
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    complex-data-array-handler

An array collection of large data set query tool.


Version published
Weekly downloads
1
Maintainers
1
Install size
174 kB
Created
Weekly downloads
 

Readme

Source

在前端或 Node 需要大数据集需要查询数据时使用。

[TOC]

安装 / 使用

yarn add complex-data-array-handler
// or
npm i complex-data-array-handler --dev

此工具提供了三个方法和一个扩展属性:

  1. 精确查询数据方法:cdah.get
  2. 模糊查询数据方法:cdah.searsh
  3. 数据设置方法:cdah.set
  4. 数据路径与父级:[].$parent / [].$path
const cdah = require('complex-data-array-handler')

cdah.get(data, condition, [matching]): array

参数

名称数据类型必填描述
dataArrayYes需要查询的数组。
conditionStringYes查询条件,多个条件之间用 , 逗号隔开。单个条件的组成: 条件键 + 条件符号 + 匹配值。

此方法将返回一个新的数组。

查询条件说明

  • 键:数据是对象或数组时有效,选填。
  • 符号:包括 <, >, <=, >=, !=, = ,此部分如果不填则会使用 =
  • 值:需要搜索的内容,一个键对应多个值时,可以使用 | 链接。

例子

以下为测试数据:

const sayings = [
  {
    id: 1,
    text: '人人为我,我为人人.',
    name: { en: 'Dumas pere', zh: '大仲马' },
  },
  {
    id: 2,
    text: '手中的一只鸟胜于林中的两只鸟.',
    name: { en: 'Heywood', zh: '希伍德' },
  },
  {
    id: 3,
    text: '易得者亦易失.',
    country: '[美]',
    name: { en: 'Hazlitt', zh: '赫斯特' },
  },
  {
    id: 4,
    text: '时间就是金钱.',
    country: '[美]',
    name: { en: 'Benjamin Franklin', zh: '富兰克林' },
  },
  {
    id: 5,
    text: '伟大的人物总是愿意当小人物的.',
    name: { en: 'R. W. Emerson', zh: '爱默生' },
  },
]

假设我们需要获得如下结果:

;[
  {
    id: 1,
    text: '人人为我,我为人人.',
    country: '[法]',
    name: { en: 'Dumas pere', zh: '大仲马' },
  },
  {
    id: 2,
    text: '手中的一只鸟胜于林中的两只鸟.',
    name: { en: 'Heywood', zh: '希伍德' },
  },
  {
    id: 5,
    text: '伟大的人物总是愿意当小人物的.',
    name: { en: 'R. W. Emerson', zh: '爱默生' },
  },
]

以下几种方式结果一样:

cdah.get(sayings, '1,2,5')

cdah.get(sayings, 'id=1,id=2,id=5') // 效果同上

cdah.get(sayings, 'id=1|2|5') // 效果同上

cdah.get(sayings, 'id<3,id>4') // 效果同上

// 数组条件查询
var ids = [1, 2, 5]
cdah.get(sayings, 'id=' + ids.join('|')) // 效果同上

cdah.search(data, condition, [matching]): array

get 为匹配条件获取数据,而 search 为模糊搜索相关的数据,它的参数和 get 的完全一样。

此方法仍然返回一个新的数组。

例子

假设需要获取如下数据:

;[
  {
    id: 3,
    text: '易得者亦易失.',
    country: '[美]',
    name: { en: 'Hazlitt', zh: '赫斯特' },
  },
  {
    id: 4,
    text: '时间就是金钱.',
    country: '[美]',
    name: { en: 'Benjamin Franklin', zh: '富兰克林 ' },
  },
]

以下几种方式效果一样。

cdah.search(sayings, '美')

cdah.search(sayings, 'country=美') // 效果同上

cdah.search(sayings, 'country=*') // 效果同上,只查询有 country 值的数据

// 获取全部对象类数据
cdah.search(sayings, '*')

cdah.set(data, modify): array

这是一个数据批量更新方法,请注意,此方法会修改当前操作的数据。

例子

const queryData = cdah.search(sayings, 'id=2|5')
const modifyData = cdah.set(data, { country: '[美]' })

修改前:

;[
  {
    id: 2,
    text: '手中的一只鸟胜于林中的两只鸟.',
    name: { en: 'Heywood', zh: '希伍德' },
  },
  {
    id: 5,
    text: '伟大的人物总是愿意当小人物的.',
    name: { en: 'R. W. Emerson', zh: '爱默生' },
  },
]

修改后的数据:

;[
  {
    id: 2,
    text: '手中的一只鸟胜于林中的两只鸟.',
    country: '[美]',
    name: { en: 'Heywood', zh: '希伍德' },
  },
  {
    id: 5,
    text: '伟大的人物总是愿意当小人物的.',
    country: '[美]',
    name: { en: 'R. W. Emerson', zh: '爱默生' },
  },
]

[].$path

针对 JavaScript 数据无法获取父级数据的问题,提供的方案,此属性提供查询的数据具体路径。

因为支持深度查询,所有为了更好的跟踪数据而提高的方法。此参数为一个对象数组,路径数据位置对应获取的数据位置。

例子

console.log(cdah.search(sayings, '希伍德').$path)

// 输出以下数据:
;[
  {
    key: [1, 'name'], // 此为内容深度查询中的对应key值
    value: [
      [
        {
          id: 1,
          text: '人人为我,我为人人.',
          name: { en: 'Dumas pere', zh: '大仲马' },
        },
        {
          id: 2,
          text: '手中的一只鸟胜于林中的两只鸟.',
          name: { en: 'Heywood', zh: '希伍德' },
        },
        {
          id: 3,
          text: '易得者亦易失.',
          country: '[美]',
          name: { en: 'Hazlitt', zh: '赫斯特' },
        },
        {
          id: 4,
          text: '时间就是金钱.',
          country: '[美]',
          name: { en: 'Benjamin Franklin', zh: '富兰克林' },
        },
        {
          id: 5,
          text: '伟大的人物总是愿意当小人物的.',
          name: { en: 'R. W. Emerson', zh: '爱默生' },
        },
      ],
      {
        id: 2,
        text: '手中的一只鸟胜于林中的两只鸟.',
        name: { en: 'Heywood', zh: '希伍德' },
      },
      {
        en: 'Heywood',
        zh: '希伍德',
      },
    ],
  },
]

添加新的查看格式:详细查询(之前的字符串查询方式任然可用),之前查询条件传入的是字符串,现在可以传入对象数组,详细使用见下面的示例;

对象查询参数说明:

;[
  {
    key: 'xxx',
    value: 'yyyyy',
    mode: '==',
    enable: true,
    strict: false
  }
]
属性类型必填描述
keystringNO要查询的对象属性
valueanyNO查询内容值
modestringNO指定查询方式,包括:'==', '!=', '>', '>=', '<', '<=',默认为 '=='
enablebooleanNO是否生效此条件,方便更新查询条件,默认为 true
strictbooleanNO是否严格查询,默认为 false

strict(是否严格查询)

// 申明测试数据
var testData = [
  {
    name: null,
    sn: 't01',
  },
  {
    name: undefined,
    sn: 't02',
  },
  {
    name: 1,
    sn: 't03',
  },
  {
    name: '1',
    sn: 't04',
  },
  {
    name: true,
    sn: 't05',
  },
  {
    name: false,
    sn: 't06',
  },
  {
    name: '',
    sn: 't07',
  },
]

例子一

查询特殊值:null。 以下采用两种查询方式:

// 1、快速查询(注:null、undefined 都会转换为 ''):
cdah.get(testData, null)

// 2、详细查询,和快速查询效果一样:
cdah.get(testData, [{ value: null }])

输出:

;[
  { name: null, sn: 't01' },
  { name: undefined, sn: 't02' },
  { name: '', sn: 't07' },
]

修改 2、详细方式为 “严格查询”:

cdah.get(testData, [{ value: null, strict: true }])

修改后输出:

;[{ name: null, sn: 't01' }]

例子二

查询对比:name 为 1(数字)的数据。

// 1、普通方式
cdah.get(testData, 'name=1')

// 2、详细方式
cdah.get(testData, [{ key: 'name', value: 1 }])

输出:

;[{ name: 1, sn: 't03' }, { name: '1', sn: 't04' }]

修改 2、详细方式为严格查询:

cdah.get(testData, [
  {
    key: 'name',
    value: 1,
    strict: true,
  },
])

修改后输出:

;[{ name: 1, sn: 't03' }]

通过以上可以看出普通查询(字符串查询)是无法区分数据类型的,因此就可以使用详细方式查询。

enable(是否生效此条件)

多条件查询:'1', true。

cdah.get(testData, [{ value: '1' }, { value: true }])

输出:

;[{ name: 1, sn: 't03' }, { name: '1', sn: 't04' }, { name: true, sn: 't05' }]

关闭第一个条件,在所动态更新时很方便:

cdah.get(testData, [{ value: '1', enable: false }, { value: true }])

输出:

;[{ name: true, sn: 't05' }]

组合条件查询

此功能之前是一直支持,在此再补充说明下:

组合条件查询,必须满足:name = 1, sn: 't04' 的数据。 普通查询(遍历数据,只要数据中满足任何一个条件则返回此数据)

cdah.get(testData, [{ value: '1' }, { value: 't04' }])

返回值中包含了 sn = 't03' 的数据。

;[{ name: 1, sn: 't03' }, { name: '1', sn: 't04' }]

组合查询(遍历数据,只要数据中必须满足全部条件则返回此数据)使用方式很简单,执行给出给二个参数为:true 即可(默认为:false)。

cdah.get(testData, [{ value: '1' }, { value: 't04' }], true)

输出:

;[{ name: '1', sn: 't04' }]

相关文档

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

Keywords

FAQs

Last updated on 26 Jun 2019

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc