使用一个键的值数组过滤大量javascript对象

时间:2015-02-18 19:50:59

标签: javascript arrays object functional-programming underscore.js

我想使用以下category_id值数组按category_id过滤以下对象:

[19012000, 19012001, 19012002, 19012003, 19012004, 19012005, 19012006, 19012007, 19012008] 



Object {_account: "mjj9jp92z2fD1mLlpQYZI1gAd4q4LwTKmBNLz", _id: "rEEwENwnznCQvkm61wRziKlMRPqaYztnR4vn61", amount: 15, category: Array[2], category_id: "13005015"…}
Object {_account: "AaaraZrLqLfzRYoAPlb6ujPELWVW4dTK4eJWj", _id: "944r40rPgPU2nXqzMYolS5nyo6Eo9OuqrlDkB", amount: 50, category: Array[3], category_id: "19012000"…}
Object {_account: "AaaraZrLqLfzRYoAPlb6ujPELWVW4dTK4eJWj", _id: "rEEwENwnznCQvkm61wZ9uey62Pjy5YTqgYGDK", amount: 24, category: Array[2], category_id: "13005007"…}
Object {_account: "mjj9jp92z2fD1mLlpQYZI1gAd4q4LwTKmBNLz", _id: "rEEwENwnznCQvkm61wRziKlMRPqaYztnR4vn61", amount: 45, category: Array[2], category_id: "13005009"…}
Object {_account: "AaaraZrLqLfzRYoAPlb6ujPELWVW4dTK4eJWj", _id: "944r40rPgPU2nXqzMYolS5nyo6Eo9OuqrlDkB", amount: 105, category: Array[3], category_id: "13005009"…}

完成后,category_id 19012000的对象应该是唯一剩下的对象。

Object {_account: "AaaraZrLqLfzRYoAPlb6ujPELWVW4dTK4eJWj", _id: "944r40rPgPU2nXqzMYolS5nyo6Eo9OuqrlDkB", amount: 50, category: Array[3], category_id: "19012000"…}

我已经尝试了不同版本的iteratee函数,包括filter,map和each,并尝试了键值,值,反转,选择和省略的键值过滤器。在尝试了这个之后,我相信它应该可行,我会联系到你:

var postDate = _.filter(_.first(goodDates), function(n){return category_id.indexOf(n.category_id) !== -1})

其中goodDates是对象列表,category_id是上面的数组。

2 个答案:

答案 0 :(得分:2)

带有字符串和数字的

indexOf()

var a = [123]; 
console.log(a.indexOf(123));  //true   
console.log(a.indexOf("123"));  //false

您的代码无效,因为您正在将对象中的字符串与数组中的数字进行比较。

category_id.indexOf(+n.category_id)

category_id.indexOf(parseInt(n.category_id, 10))

答案 1 :(得分:0)

我在这里没有看到任何使用_.first的理由?您的过滤器语句的其余部分看起来不错,尽管您可以调用_.containsindexOf调用:

var postDates = _.filter(goodDates, function(n){
    return _.contains(category_id, n.category_id);
});