npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sku-filter

v1.0.1

Published

simple sku filter

Readme

sku-filter

NPM

使用场景:

商品详情页一般有 Product => SKUS<Array> => types<Array> 1对n对n的关系

初始化把已有的SKUs渲染出来的时候, 需要遍历嵌套的数据

每次点击直接对原始数据进行过滤操作,也需要遍历嵌套的数据

这些会造成很多不必要的遍历操作

实际上我们后续只会对types<Array> 的数据进行交互,

选择的条件满足一个SKU的时候根据对应关系把这个SKU找到即可

所以我们在初始化遍历原始数据的时候建立对应关系,后续只操作types, 当选择条件已满,返回符合条件的那个唯一SKU

SKU
{
    "id": 106, 
    "name": null, 
    "description": null, 
    "price": {
        "level1": "10", 
        "level2": "5"
    }, 
    "type": {
        "颜色": "红", 
        "大小": "S", 
        "性别": "男"
    }, 
    "image": "default_point_shop_product_sku.jpg", 
    "stock": "99999995", 
    "point_shop_product_id": "3"
}
Map about Product => SKUS
{
    "code": 1, 
    "data": {
        "id": 3, 
        "min_price": {
            "level1": "10", 
            "level2": "5"
        }, 
        "name": "aa", 
        "description": "bb", 
        "image": "1ac9d492.png", 
        "created_at": "2018-08-10 13:31:25", 
        "updated_at": "2018-10-12 17:01:33", 
        "deleted_at": null, 
        "category_id": "1", 
        "sliders": [
            "d6a4a433.png", 
            "c37daee5.jpg"
        ], 
        "vip_level_slug": "level1", 
        "max_price": {
            "level1": "10", 
            "level2": "5"
        }, 
        "type": [
            "颜色", 
            "大小", 
            "性别"
        ], 
        "is_virtual": true, 
        "used_num": "110", 
        "details": "<p>cc</p>", 
        "limit_num": "0", 
        "partner_shop_id": "58", 
        "is_recommend": true, 
        "category_sort": "0", 
        "all_sort": "0", 
        "recommend_sort": "0", 
        "is_online": true, 
        "is_collected": true, 
        "all_stock": 129999951, 
        "skus": [
            {
                "id": 106, 
                "name": null, 
                "description": null, 
                "price": {
                    "level1": "10", 
                    "level2": "5"
                }, 
                "type": {
                    "颜色": "红", 
                    "大小": "S", 
                    "性别": "男"
                }, 
                "image": "default_point_shop_product_sku.jpg", 
                "stock": "99999995", 
                "point_shop_product_id": "3"
            }, 
            {
                "id": 107, 
                "name": null, 
                "description": null, 
                "price": {
                    "level1": "10", 
                    "level2": "5"
                }, 
                "type": {
                    "颜色": "红", 
                    "大小": "XL", 
                    "性别": "男"
                }, 
                "image": "default_point_shop_product_sku.jpg", 
                "stock": "9999991", 
                "point_shop_product_id": "3"
            }, 
            {
                "id": 108, 
                "name": null, 
                "description": null, 
                "price": {
                    "level1": "10", 
                    "level2": "5"
                }, 
                "type": {
                    "颜色": "绿", 
                    "大小": "XL", 
                    "性别": "女"
                }, 
                "image": "default_point_shop_product_sku.jpg", 
                "stock": "9999966", 
                "point_shop_product_id": "3"
            }, 
            {
                "id": 109, 
                "name": null, 
                "description": null, 
                "price": {
                    "level1": "10", 
                    "level2": "5"
                }, 
                "type": {
                    "颜色": "红", 
                    "大小": "SL", 
                    "性别": "女"
                }, 
                "image": "default_point_shop_product_sku.jpg", 
                "stock": "9999999", 
                "point_shop_product_id": "3"
            }
        ], 
        "partner_shop": {
            "id": 58, 
            "name": "测试品牌1", 
            "created_at": "2018-08-09 10:48:23", 
            "updated_at": "2018-08-09 10:48:23", 
            "support_phone": null, 
            "support_web_link": null, 
            "url_to_some_news": null, 
            "checkbox_text_en": null, 
            "checkbox_text_cn": null, 
            "lunch_website_button_text": null, 
            "support_details": null, 
            "logo_image": "9b2b75f6.png", 
            "description": "测试品牌1简介", 
            "detail": "测试品牌1详情", 
            "discount": [ ]
        }
    }
}
如何使用
安装 npm install --save filter-sku
引入 import filterSKU from "filter-sku"
  1. 实例化

    const skus = new SKU({data: skus<Array>});
  2. 初始化数据

    const init = skus.initial();
  3. 过滤数据 输入已选条件(sku.types)

    const result = skus.filter(conditions); // [{颜色: '红'}]
@param {Array} let skus = new SKUFilter({data: skus}); 必填

@param {Funtion} initial() => {
    skus: skus<Array>, // 所有的sku [{颜色: "红", 大小: "S", 性别: "男"}]
    sku_types: sku_types<Array>, // 所有的sku类型key ["颜色", "大小", "性别"]
    convenient_render<Map> // 方便渲染的格式 {"颜色" => [红, 黑], "大小" => [L, XL], "性别" => [男, 女]}
}

@param {Function} filter(conditions: Array) => {
        selected_types<Array>, // 已选类型 ["颜色", "大小", "性别"]

        selected_detail<String>, // 已选的具体参数 每次点击的时候显示已选的参数 "颜色: 红 "

        match_skus<Array>, // 符合条件的SKU[{颜色: "红", 大小: "XL", 性别: "男"}]

        mismatch_skus<Array>, // 不符合条件的SKU[{颜色: "红", 大小: "XL", 性别: "男"}]

        render_list<Array>, // 比如 [{颜色: "红"}, {大小: "XL"}...]视图更新方便

        final_sku<Object>, // 符合全部已选条件的sku {颜色: "红", 大小: "XL", 性别: "男"} || null

        target<Object>, // 加入购物车或者立即购买需要提交的完整的SKU
            /* {
                     description: null,
                     id: 107,
                     image: "default_point_shop_product_sku.jpg",
                     name: null,
                     point_shop_product_id: "3",  
                     price: {level1: "10", level2: "5"},
                     stock: "9999991",
                     type: {颜色: "红", 大小: "XL", 性别: "男"}
            	}
            */
}


@example 

 1. 初始化SKU

    const skus = new SKUFilter({data: skus<Array>})

 2. 可选三种方法

    1) const init = skus.initial();

    2) const result = skus.filter(conditions<Array>) // [{颜色: '红'}]