0

好奇我在这里做错了什么:

employee_ids = $('[data-employee_id="'+employee+'"]');
timestamp_ids = $('[data-scheduled_on="'+timestamp+'"]');

var common = $.grep(timestamp_ids, function(element) {
  $.each(employee_ids, function(idx, item) {
     if ( item === element ) { console.log ("omg!") };
  });
});

这仅返回与查找单个匹配项timestamp_ids进行比较的列表,而不是该数组。employee_ids

4

4 回答 4

1

不管还有什么问题,看起来错误发生在$.grep

timestamp_ids 的类型是什么?根据jQ docs,它需要是一个数组。

于 2012-07-20T17:37:51.190 回答
1

您没有正确使用.grep。grep 的每次迭代都应该返回一个布尔值:true 表示将其添加到结果数组,false 表示忽略它。

var listA = [1, 2, 3];
var listB = [2, 3, 4];

var union = $.grep(listA, function (element) {
    return listB.indexOf(element) !== -1;
}); 

请注意,IE 不支持.indexOf数组,您必须以其他方式实现比较。

编辑:如果您试图找到符合某些条件的数组的单个项目,我建议只使用常规 for 循环:

var result;
for (var i = 0; i < yourArray.length; i++) {
    if (yourArray[i].id === employee_ID) { // whatever conditions you have
        result = yourArray[i];
        break;
    }
}

if (result) {
    // do whatever
} else {
    // no match
}
于 2012-07-20T17:40:36.677 回答
1

这行得通吗?

employee_ids = $('[data-employee_id="'+employee+'"]');
timestamp_ids = $('[data-scheduled_on="'+timestamp+'"]');

var common = $.grep(timestamp_ids, function(element) {    
    return !($.inArray(element, timestamp_ids) == -1)
});
于 2012-07-20T17:42:36.860 回答
1

哇!感谢大家的帮助。我刚刚意识到我可以做到这一点:

$('[data-employee_id="'+employee+'"][data-scheduled_on="'+timestamp+'"]');

我也意识到我是个白痴:(

于 2012-07-20T17:49:06.347 回答