【问题标题】:jQuery .grep() and .filter() not workingjQuery .grep() 和 .filter() 不起作用
【发布时间】:2015-03-09 17:07:06
【问题描述】:

我有这个代码:

var event = $("‪#‎calendar‬").fullCalendar( 'clientEvents');
console.log(event);
event = $.grep(event, function(n) {
return n.id == "168" || n._id == "168";
});
console.log(event);

第一个 console.log,记录一个包含 12 个对象的数组。每个对象都有 .id 和 ._id 索引,我可以看到 id 168 确实存在。 第二个 console.log() 不幸地记录了一个空数组...... 我做错了什么?

我也尝试过 .filter()

event = event.filter(function(n){
     return n.id === "168";
});

但我仍然得到一个空数组..

编辑:在这里您可以看到第一个 console.log() http://i61.tinypic.com/fmifiu.png 的图像 如您所见,“id”索引是一个字符串。 我还尝试了 === 和 == (这应该适用于整数和字符串,因为它不比较类型)

编辑 2:如果我将 console.log(n) 放在 .grep 过滤函数中,则控制台不会记录任何内容。为什么??

【问题讨论】:

  • "123"123 之间存在差异。 (123 !== "123")
  • $("‪#‎calendar‬").fullCalendar( 'clientEvents'); 返回什么?可以创建 stacksn-ps , jsfiddle 吗?
  • 在这里您可以看到 FIRST console.log() 记录 i61.tinypic.com/fmifiu.png 的图片,如您所见,'id' 是一个字符串
  • @Yuri 不要发布图像,而是在控制台中运行它并 c/p 输出:JSON.stringify(event, null, '\t') 如果内容对于 SO 来说太大,您可以使用 pastebin.com
  • @null 我试过了,但我得到了 []。

标签: jquery filter grep


【解决方案1】:

我用一个肮脏的技巧让它工作(我仍然不知道为什么它不能以正常方式工作)。 代码如下:

setTimeout(function() {
                var event = events.filter(function(n){

                    return n.id == "168";
                });

                console.log(event);
            }, 100);

它以这种方式工作,但是,为什么?

【讨论】:

  • 因为当您尝试访问 clientEvents 时还没有,但是当调用上述超时时,数组已被填充。
  • 是的,这很明显,但为什么呢? clientEvents 函数从缓存的变量中返回一个数组,因此返回它应该没有任何延迟
猜你喜欢
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2012-12-14
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多