我有以下代码:
$.each(data, function (key, val) {
var items = val.items;
console.log(val.id);
if (val.id === this.id) {
console.log('hello');
}
});
在上面的代码中,我循环遍历{J}对象的data
。然后,我将id
的{{1}}与val
进行比较,this.id
的值为4
。因此,我想要的是val.id (4)
等于this.id (4)
然后记录hello
,但是,因为data
有几个对象所以它记录了几个hellos。
为什么以及如何才能使它只在匹配该条件并且退出该循环时才打招呼?
答案 0 :(得分:3)
在each()
调用中定义的函数中,这= = val。
如果您要在调用每个值之前与this.id
的值进行比较,则需要对其进行缓存,如下所示:
var someId = this.id;
$.each(data, function (key, val) {
var items = val.items;
console.log(val.id);
if (val.id === someId) {
console.log('hello');
}
});
答案 1 :(得分:0)
正如艾莉森所说,this
一边是函数val
所以你需要某种缓存。 (当您只需要值而不是密钥时,此功能非常有用,因此您可以function(){...}
并使用this
代替
另外,如果你想从.each
循环中断,在循环函数内返回false:
var someId = this.id;
$.each(data, function (key, val) {
var items = val.items;
console.log(val.id);
if( val.id === someId ) {
console.log('hello');
return false;
}
});
中指定
答案 2 :(得分:0)
你在这里得到的是,你在if条件下比较相同的数据,这总是正确的。
this
代表每个循环中的当前元素,在您的情况下为data
,同样也代表val
..您可以在循环内尝试使用console.log(this)
..
if( val.id === this.id ){ //this will always be true
所以你必须重新考虑你的逻辑.....你在(那)条件下实际需要匹配的东西。
中试用当它匹配那个条件并离开那个循环时