2015-04-28 166 views
0

我試圖過濾類似於以下數據:定製角度濾波器

data = { 
    ABC: "Lorem Ipsum lorem lorem", 
    DEFG: "Lorem Ipsum lorem lorem", 
    HI: "Lorem Ipsum lorem lorem", 
    JK: "Lorem Ipsum lorem lorem" 
} 

針對陣列如:

myArray = ["HI","LMN","ABC"] 

我試圖返回對的量,關鍵是不要目前在myArray

我曾嘗試沒有成功如下:

$scope.filteredResults = $filter("filter")(data, function (val, index) { 
    for (var i = 0; i < myArray.length; i++) { 
    if (index === myArray[i]) { 
     return false 
    } 
    } 
    return true 
}) 
+0

老實說,這只是一個普通的JavaScript'Array.prototype.filter'問題... –

+0

你有一個角過濾名爲 「過濾器」? $ filter是獲取現有過濾器的服務,您可以使用module.filter()語法定義一個新過濾器。 – doldt

+0

不應該'數據'是一個數組?根據文檔,過濾器的第一個參數必須是「數組」。它是否正確? –

回答

1

如果Object的索引是它的鍵,那麼你可以通過使用Array.prototype.indexOf來檢查它是否存在於數組中。我假設index是對象的關鍵?

$scope.filteredResults = $filter("filter")(data, function(val, index) { 
    return myArray.indexOf(index) === -1; 
}) 

如果你想返回一個過濾的對象,但不包括存在於過濾器列表中的任何鍵,您可以通過按鍵進行過濾,然後減少基礎上,允許鍵的對象。

下面是一個用黑名單過濾對象的純JavaScript實現。

var data = { 
 
    ABC: "Lorem Ipsum lorem lorem", 
 
    DEFG: "Lorem Ipsum lorem lorem", 
 
    HI: "Lorem Ipsum lorem lorem", 
 
    JK: "Lorem Ipsum lorem lorem" 
 
}; 
 
var blackList = ["HI", "LMN", "ABC"]; 
 

 
var filtered = Object.keys(data).filter(function(key) { 
 
    return blackList.indexOf(key) === -1; 
 
}).reduce(function(result, key) { 
 
    result[key] = data[key]; 
 
    return result; 
 
}, {}); 
 

 
document.body.innerHTML = JSON.stringify(filtered, null, ' ');
body { white-space: pre; font-family: monospace; }

+0

我很喜歡angulars過濾,我忘了原型過濾器...謝謝 –

1

如果您在controller這樣做,爲什麼不只是做純的JavaScript?

僅供參考:在Plain JavaScript中做這些簡單的事情比在Angular Utilities中做得更快。

var data = { 
 
    ABC: "Lorem Ipsum lorem lorem", 
 
    DEFG: "Lorem Ipsum lorem lorem", 
 
    HI: "Lorem Ipsum lorem lorem", 
 
    JK: "Lorem Ipsum lorem lorem" 
 
}; 
 

 
var myArray = ["HI", "LMN", "ABC"]; 
 
var keys = Object.keys(data); 
 

 
var result = {}; 
 

 
for (var i = 0; i < keys.length; i++) { 
 
    if (myArray.indexOf(keys[i]) == -1) { 
 
    result[keys[i]] = data[keys[i]]; 
 
    } 
 
} 
 

 
document.body.innerHTML = JSON.stringify(result);