Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >仅当数组尚未出现时才推送到该数组

仅当数组尚未出现时才推送到该数组
EN

Stack Overflow用户
提问于 2013-12-09 11:45:24
回答 6查看 10.1K关注 0票数 2

我有几个复选框,这些复选框根据选中的复选框筛选产品。当单击复选框并将产品ids添加到数组时,筛选器工作。如您所见,这两个过滤器都有一些相同的if,因此,如果它们单击多个输入框,我希望确保if只被推入数组一次。例如:如果他们选择了input.white,选择了input.greymelange,那么他们点击了filter-btn,我只想让重复的ids被推送一次。有什么办法我能做到吗?

JQUERY

代码语言:javascript
运行
AI代码解释
复制
var productIds = [""];

$(document).on('click', 'a.filter-btn', function(e){

    $( ".listingTemplate" ).html("");
   if ($('input.white').is(':checked')) {
          productIds.push("4021401143741", "4021402266227");
    } 

   if ($('input.greymelange').is(':checked')) {
          productIds.push("4021401143741", "4021402266227","4021402266418", "4021401143796");
    } 
});

代码语言:javascript
运行
AI代码解释
复制
 <input type="checkbox" id="white" class="white" value="white" />                
 <input type="checkbox" id="greymelange" class="greymelange" value="greymelange" />
<a href="#" class="filter-btn">filter</a>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-12-09 11:50:10

您可以使用$.inArray()$.each()

1)将所有新值保存在数组deArray.中

2)使用productIds迭代这个数组,然后使用inArray()查找它是否在inArray()中。

代码语言:javascript
运行
AI代码解释
复制
if ($('input.greymelange').is(':checked')) {
        var deArray = ["4021401143741", "4021402266227", "4021402266418", "4021401143796"];
        $.each(deArray, function (i, j) {
            if ($.inArray(j, productIds) == -1) {
                productIds.push(j);
            }
        });
    }

建议:不会在数组中声明空字符串。

代码语言:javascript
运行
AI代码解释
复制
var productIds = [""];  //considered as an string. This will affect 
                        //when you check length, now it is 1
var productIds = []; //length is 0

最后,

代码语言:javascript
运行
AI代码解释
复制
var productIds = [];

$(document).on('click', 'a.filter-btn', function (e) {
    $(".listingTemplate").html("");
    if ($('input.white').is(':checked')) {
        var dArray = ["4021401143741", "4021402266227"];
        $.each(dArray, function (i, j) {
            if ($.inArray(j, productIds) == -1) {
                console.log(j)
                productIds.push(j);
            }
        })
    }

        if ($('input.greymelange').is(':checked')) {
            var deArray = ["4021401143741", "4021402266227", "4021402266418", "4021401143796"];
            $.each(deArray, function (i, j) {
                if ($.inArray(j, productIds) == -1) {
                    productIds.push(j);
                }
            })
        }
            console.log(productIds)
        });

JSFiddle

票数 4
EN

Stack Overflow用户

发布于 2013-12-09 12:02:15

如果您只有一组固定的产品ID,为什么需要一个可变长度的数组来存储检查哪个产品ID?

我建议也许建立一个包含你可以使用的逻辑的对象。

代码语言:javascript
运行
AI代码解释
复制
function productMapper() {
    var colorToIdMap = {
        'white' = [
            '4021401143741',
            '4021402266227'
        ],
        'greymelange' = [
            '4021401143741',
            '4021402266227',
            '4021402266418',
            '4021401143796'
        ]
    };
    var selectedIds = [];
    function selectIds(color) {
        this.selectedIds = [];
        var colorIds = this.colorToIdMap[color];
        for(i = 0; i < colorIds.length; i++) {
           var currentId = colorIds[i];
           if(this.selectedIds.indexOf(currentId) === -1) {
               this.selectedIds.push(currentId);
           }
        }
    }
    function getSelectedIds() {
        return this.selectedIds;
    }
}

用法可能是:

代码语言:javascript
运行
AI代码解释
复制
var selectedProductMap = new productMapper();

$(document).on('click', 'a.filter-btn', function(e){

    $( ".listingTemplate" ).html("");
    if ($('input.white').is(':checked')) {
          selectedProductMap.selectIds('white');
    } 

    if ($('input.greymelange').is(':checked')) {
          selectedProductMap.selectIds('greymelange');
    } 
});

这里的好处是,当您添加新颜色和产品Id时,只需将它们添加到该类中就很容易了(或者让类的这一部分动态地从数据库中构建)。

我还建议考虑对HTML进行重构,这样您就不需要为每个颜色选项添加一个if条件。可能会给所有复选框输入一个公共类,并从input属性导出颜色值。像这样的东西可能会出现在onclick函数中:

代码语言:javascript
运行
AI代码解释
复制
$('input.filterCheckbox').each(function(index.value)) {
    var $currentCheckbox = $(this);
    if($currentCheckbox.is(':checked')) {
        selectedProductMap.selectIds($currentCheckbox.val());
    }
}

var currentlySelectedIds = selectedProductMap.getSelectedIds();
票数 2
EN

Stack Overflow用户

发布于 2013-12-09 11:47:43

在添加到列表之前,您需要检查项目是否包含。不幸的是,这并不像应该的那样简单,但是下面的堆栈解释说:如何检查数组是否包括JavaScript中的对象?

由于您将其标记为jQuery,下面的代码(示例)可能适用于您:

代码语言:javascript
运行
AI代码解释
复制
if ($.inArray("4021401143741", productIds) === -1)
   productIds.push("4021401143741");

有关此调用请看这里的更多信息。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20479310

复制
相关文章
springboot之前端参数验证
对于任何一个应用而言,在客户端做的数据有效性验证主要目的是规范用户的输入,而真实的数据验证工作都是在服务后端代码当中实现的,但在实际的项目当中,也经常会因为各种各样的原因:懒得写,觉得前端验证了,后端没有太多的必要等等没有进行数据验证,其实养成数据的有效性验证是一个非常好的习惯。 1 可以避免很多数据有效性导致的BUG,防范其余开发者的基础攻击 2 在前后端进行接口联调的时候,不需要因为参数的问题沟通很久。
海加尔金鹰
2020/06/08
1.1K0
location.href跳转测试
测试代码 <script type="text/javascript"> function ToUrl(x){ location.href=x; } </script> <a href="javascript:;" onclick="javascript:ToUrl('http://www.baidu.com');">location.href跳转测试1</a> <a href="javascript:void(0);" onclick="javascr
deepcc
2018/07/05
7140
[答疑]是增加了一个功能还是增加了一个系统
关于系统的定义,《软件方法》一书给出了2个关键点,后来在答疑时补充了系统要满足充分,必要条件。现实中做系统增量开发时,并不是很好分辨。
用户6288414
2020/04/08
4150
[答疑]是增加了一个功能还是增加了一个系统
go : gin路径参数
本文介绍 gin框架下如何获取路径参数代码:package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { router := gin.Default() // This handler will match /user/john but will not match /user/ or /use router.GET("/user/:name", func(c *gin.Context) {
IT工作者
2022/07/22
7830
FastAPI教程 路径参数
所以,如果你运行示例并访问 http://127.0.0.1:8000/items/foo,将会看到如下响应:
wencheng
2022/04/18
6120
FastAPI教程 路径参数
Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/20
6340
Confluence 6 在升级之前
location.href跳转测试
测试代码 <script type="text/javascript"> function ToUrl(x){ location.href=x; } </script> <a href="javascript:;" onclick="javascript:ToUrl('http://www.baidu.com');">location.href跳转测试1</a> <a href="javascript:void(0);" onclick="javascr
deepcc
2018/05/16
1.1K0
Confluence 6 在升级之前 原
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/29
5340
Confluence 6 在升级之前
                                                                            原
fastapi 用户指南(路径参数、查询参数、请求体)
learn from https://fastapi.tiangolo.com/zh/tutorial/
Michael阿明
2022/01/07
1.9K0
fastapi 用户指南(路径参数、查询参数、请求体)
FastAPI学习-2.路径参数
所以,如果你运行示例并访问 http://127.0.0.1:8000/items/foo,将会看到如下响应:
上海-悠悠
2023/08/22
2820
FastAPI学习-2.路径参数
java——推断日期是否在今天之前
这里说的日期是指字符串的日期格式,如“2014-10-15”,我们要推断这个日期是否在今天之前,网上看到好多推断的方法,都是拿这个日期转换成Date对象 然后与new Date()比較,使用comparetTo() 或者before()方法,事实上这样做都会有点小问题,这样做忽略了一个小时分钟的比較,会出现错误,得不到正确的结果。
全栈程序员站长
2022/07/08
2.2K0
Consul初探-在深交之前先认识
首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现、配置、分段等控制管理平台,Consul 中的每项功能都可以单独使用,也可以一起使用来构建完整的服务网格;在 Consul 内部,有一个简单的代理服务,所以在安装 Consul 后,马上就可以开始使用 Consul ;当然,Consul 也支持集成第三方代理,比如 Envoy。
梁规晓
2019/07/09
5230
Consul初探-在深交之前先认识
FastAPI(4)- 路径参数 Path Parameters
123 传进来的时候是字符串,但 FastAPI 会自动解析转换成 int,如果转换失败就会报错
小菠萝测试笔记
2021/09/26
2.2K0
FastAPI(4)- 路径参数 Path Parameters
sqlmap 源码分析(三)在注入之前
sqlmap是web狗永远也绕不过去的神器,为了能自由的使用sqlmap,阅读源码还是有必要的…
LoRexxar
2023/02/21
1.6K0
MCU在执行main之前做了什么?
本文以Arm Cortex-M为例,介绍了在IAR Embedded Workbench中微控制器(MCU)的启动过程。在MCU复位后,程序计数器(PC)会指向相应的复位向量,并开始执行启动代码(startup code)。如果MCU支持浮点单元(FPU),则在启动过程中,首先会调用__iar_init_vfp来初始化FPU,然后继续执行__iar_program_start。接着,__iar_program_start会调用__cmain函数。在__cmain中,会先调用__low_level_init函数,然后调用__iar_data_init3来进行全局和静态变量的初始化。在__iar_data_init3中,首先会调用__iar_zero_init3来初始化初始值为0的全局和静态变量,随后会调用__iar_copy_init3来初始化初始值为非0的全局和静态变量。最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。
刘盼
2023/08/22
9890
MCU在执行main之前做了什么?
imread参数_imread函数图片路径matlab
imread的函数原型是:Mat imread( const string& filename, int flags=1 );
全栈程序员站长
2022/11/04
8240
在main方法之前,到底执行了什么?
本人在做接口测试的时候,需要用一个公共类来把所有的执行的代码,然后这个公共类有hsot和hosttype等属性来区分各个测试环境,然后在去不同的地方取用例和请求接口。在给这些属性复制的时候,我是通过不同测试环境新建不同的配置文件,然后执行每个环境的时候让只加载需要测试的环境的配置文件来实现管理测试环境的。中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法之前的代码执行顺序了解不深入导致的,中间有多个继承关系也有点扰乱了思路。下面分享一下自己这个错误的复现步骤。
FunTester
2019/08/30
7470
HyperSQL 链接参数中文件的路径
如果我们在系统中配置下面的连接参数: spring.datasource.url=jdbc:hsqldb:file:~/db/cwiki-us-jpetstore 我们怎么知道 hsqldb 数据库的存储路径在哪里? 请参考下面的解答: 在 Windows 系统中,如果你登录的用户名为 yhu 的话。 那么这个数据库文件在 :C:\Users\yhu\db 中存储。
HoneyMoose
2019/06/07
1K0
HyperSQL 链接参数中文件的路径
(adsbygoogle = window.adsbygoogle || []).push({});
HoneyMoose
2019/06/11
1.1K0
点击加载更多

相似问题

.htaccess从非www Http子文件夹重定向到www https子文件夹

18

.htaccess子文件夹从http://重定向到www

11

从域www到no-www到子文件夹

22

htaccess重写非www子文件夹到www子文件夹重定向到www根目录

12

htaccess将非www子文件夹重定向到www子文件夹。

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档