Javascript 计算对象的出现次数

Javascript 计算对象的出现次数,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我正在做一些事情,让用户预览他们在表单中所做的更改,在表单中,我比较了表单字段中更改前后的序列化对象数组。这一切都很好,但我需要排除“product[territory\u id][]”元素,因为我不需要如此深入的比较。下面的代码工作正常 // Get product form values before any changes are made // and serialise them into an array of objects $(".product_form_edit").read

我正在做一些事情,让用户预览他们在表单中所做的更改,在表单中,我比较了表单字段中更改前后的序列化对象数组。这一切都很好,但我需要排除“product[territory\u id][]”元素,因为我不需要如此深入的比较。下面的代码工作正常

// Get product form values before any changes are made
// and serialise them into an array of objects
$(".product_form_edit").ready(function() {
    form_before = $(".product_form_edit").serializeArray()

    // Using Underscore JS take out all off the product[territory_ids][] elements
    // as they cause comparison to fail. 
    // We'll do a count comparision of the number of territories set separately 
    $.each(form_before, function(i){
        form_before = _.without(form_before, _.findWhere(form_before, {name: 'product[territory_ids][]'}));
    });

    console.log(form_before);

});
我确实需要做并且正在挣扎的是检测被检查的“产品[territory_ID][]”元素数量的变化

我认为某种形式的变化:

$.each(form_before, function(i){
    form_before = _.without(form_before, _.findWhere(form_before, {name: 'product[territory_ids][]'}));
});
比如:

可能会起作用,但这和许多其他尝试只是返回未定义的结果


有人能帮忙吗?我相信这比我现在做的要简单得多。

好吧,经过一番周折,我得出结论,您可能想使用
\uuu.filter
来获取复选框数组
filter
将始终返回一个数组,因此当没有选中复选框时,您应该得到0的计数

$('#serialize').click(function() {
    var data = $('#testForm').serializeArray(),
        checkboxes = _.filter(data, function(i) {
            return i.name === 'xyz';
        });

    console.log(data, checkboxes);
    console.log(data.length, checkboxes.length);
});

完全是猜测,但是为什么
form\u之前.length
不起作用,在那里有
控制台.log
?另外,我真的很困惑,为什么你把
.ung
包装在
$中。每个
都返回表单元素的总数,在本例中为175。但我需要的是选中产品[territory_ID][]复选框的计数,其中有256个选项。在我的测试用例中,我已经检查了105个,所以这是我试图计算的数字。不带a$的u.。老实说,每一个都是黑客攻击致死的结果。但它确实有效,所以不愿意重构太多。一旦我能确定这个复选框的数量,我可能会这样做。我可能应该加上我使用Ruby编写的主要代码,所以我所做的任何基于JS的事情通常都有点冒险。好吧,这看起来很有希望。我看看能不能让它工作。谢谢你的帮助。
$('#serialize').click(function() {
    var data = $('#testForm').serializeArray(),
        checkboxes = _.filter(data, function(i) {
            return i.name === 'xyz';
        });

    console.log(data, checkboxes);
    console.log(data.length, checkboxes.length);
});