簡體   English   中英

使用for / in循環的JavaScript過濾器?

[英]A javascript filter using a for/in loop?

是否可以過濾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]);

NewProducts應包含產品A或B,具體取決於選擇的目錄陣列。 我的嘗試總是返回乘積A,如r =0。我缺少什么?

http://jsfiddle.net/rE52f/

這是因為每個循環的Javascript都會生成您集合的鍵。 您將不得不將其更改為:

for (var r in someCatalogue) NewProducts.push(products[someCatalogue[r]]);

如果不必支持IE8及以下版本,也可以在閉包內使用map:

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

可以過濾JavaScript數組,只需使用filter方法:

var arr = [1, 2, 3, 4, 5, 6];
var result = arr.filter(function(item) {
        return item > 3;
    }
);

在您的情況下,您嘗試過濾products數組以包含某些元素,因此以正確的方式進行操作:

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]]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM