使用for/in循环的javascript过滤器?
是否可以过滤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
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)
不是迭代数组的正确方法。