Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用for/in循环的javascript过滤器?_Javascript_Arrays - Fatal编程技术网

使用for/in循环的javascript过滤器?

使用for/in循环的javascript过滤器?,javascript,arrays,Javascript,Arrays,是否可以过滤javascript数组?我采取了以下方法,但似乎没有产生预期的结果 数组: var catalog1 = [0] var catalog2 = [1] var products = [{ id: "PRODUCTA", desc: "Toys" }, { id: "PRODUCTB", desc: "Cars" }] var NewProducts = []; for (r in catalog1) NewProducts.push(product

是否可以过滤javascript数组?我采取了以下方法,但似乎没有产生预期的结果

数组:

var catalog1 = [0]
var catalog2 = [1]
var products = [{ id: "PRODUCTA", desc: "Toys" },
                { id: "PRODUCTB", desc: "Cars" }]
var NewProducts = [];
for (r in catalog1) NewProducts.push(products[r]);
过滤器:

var catalog1 = [0]
var catalog2 = [1]
var products = [{ id: "PRODUCTA", desc: "Toys" },
                { id: "PRODUCTB", desc: "Cars" }]
var NewProducts = [];
for (r in catalog1) NewProducts.push(products[r]);
新产品
应包含产品A或产品B,具体取决于选择的目录阵列。我的尝试总是返回产品A,如r=0。我错过了什么


可以过滤JavaScript数组,只需使用以下方法:

在您的情况下,您正试图过滤
产品
数组以包含某些元素,因此要以正确的方式进行过滤:

var catalog1 = [0];
var catalog2 = [1];
var products = [{ id: "PRODUCTA", desc: "Toys" },
            { id: "PRODUCTB", desc: "Cars" }];

var NewProducts = products.filter( function(item) {
        // check item and if it is accepted then include it.
    }
);
在代码中,如果使用for/In循环数组元素,这不是遍历数组的正确方法,请使用常规for循环:

var NewProducts = [];
for (var i=0; i<catalog1.length; i++) NewProducts.push(products[catalog1[i]]);
var NewProducts=[];

对于(var i=0;i这是因为Javascript的for each循环生成集合的键。您必须将其更改为:

for (var r in someCatalogue) NewProducts.push(products[someCatalogue[r]]);
如果您不必支持IE8及以下版本,也可以在闭包中使用map:

(function(products) {
  NewProducts = someCatalogue.map(function(item) { return products[item]; });
})(products);

在你发布的代码中,你总是在处理
catalog1
@TedHopp是的,我简化了它,但在我的代码中有一个设置目录的条件。在小提琴中,你可以看到,如果你使用
catalog2
,它会返回产品a,而不是B。
for(catalog1中的r)
不是迭代数组的正确方法。