根据另一个值存储数组项

3

我有一个名为catalogue的数组,其中包含4个项目:

packageid、dataid、categoryid和datapackage。

我想要做的是将所有packageid等于packageBtnFiltercategoryid等于categoryBtnFilter的项目的dataids推入数组中。如果packageBtnFiltercategoryBtnFilter的值都为0,则应将catalogue中所有的dataids推入dataids数组中。目前它只会将packageid等于3的项目的dataids推入数组中。

              var packageBtnFilter = $('#packages').val();
              var categoryBtnFilter = $('#categories').val();   

                var dataids = new Array();

                $(catalogue).each(function () {
                  if (this.packageid == 3) dataids.push(this.dataid);
                });

感谢您!完整的代码在这里: http://jsfiddle.net/hunter/Tcwgf/1/
2个回答

1
使用filter函数来过滤结果,使用map来获取ID:
var dataids = (
   categoryBtnFilter==0 && packageBtnFilter==0
   ? catalogue
   : catalogue.filter(function(i) {
       return i.categoryid=categoryBtnFilter && i.packageid==packageBtnFilter
   })
).map(function(i){return i.dataid});

我觉得你忘记了0条件;没关系,你已经纠正了 :) - alexb
@alexb 不是的,请再读一遍我的回答。我只是认为最好不要在循环中进行测试,这样既有助于可读性,也有助于性能。 - Denys Séguret
我完全同意你的观点,在你最初的帖子中,我没有看到关于0条件的评论,但我认为我错过了,是我的过失。 - alexb
谢谢,但是如何添加条件:如果它们都等于0?那么我们应该返回全部。 - user1937021
@alexb 是的,我忽略了这一点。编辑后只返回id。 - Denys Séguret
显示剩余2条评论

1

我猜你的情况应该是这样的

if ((packageBtnFilter == 0 && categoryBtnFilter == 0) || this.packageid == packageBtnFilter || this.packageid == categoryBtnFilter) dataids.push(this.dataid);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接