所以我检索了一个包含facebook照片的对象,这些对象完全正常。
for (var i = 0; i < photoLikes.data.length; i++) {
if (photoLikes.data[i].name === facebook.username) {
alert("You have already liked this photo. Unliked");
var count = photoLikes.data.length;
//facebook.unlikePhoto(id, count);
}
^^此代码在上面工作,
但问题是在查看数组中的名称ISNT 时, 它的作用是迭代每个项目,如果它不等于用户名(搜索用户名是否在对象中),则调用else语句。
我只需要调用一次。有谁有任何想法?这是我的声明,因为没有。 我试过这个:
for (var x = 0; x < photoLikes.data.length; x++) {
if (facebook.photos.indexOf(facebook.username == -1)) {
console.log("increment");
}
}
和
for (var x = 0; x < photoLikes.data.length; x++) {
if (photoLikes.data[i].name != facebook.username) {
console.log("increment");
}
}
并且每次都触发。
由于
编辑:一旦满足if条件,我就试图摆脱for循环。
答案 0 :(得分:5)
基本上是user1680977的(非常好的)答案,但改进了一些设计模式(单个var,针对循环优化,类型安全比较):
var found = false,
i, count;
for (i = 0, count = photoLikes.data.length; i < count; i++) {
if (photoLikes.data[i].name === facebook.username) {
found = true;
break;
}
}
if (found === false) {
alert("The name was not found in the array");
}
如果你不需要,不要在循环中使用“else”,尽可能小而快地将代码保存在循环中。
indexOf无效,因为名称不是密钥。有一个很好的filter方法,但在这种情况下不值得。您还可以在此主题中查看答案以获取更多解决方案:How do I check if an array includes an object in JavaScript?
顺便说一下,这将是完美的功能,不需要休息:
function isUserInArray(likeArray, username) {
var i, count;
for (i = 0, count = likeArray.length; i < count; i++) {
if (likeArray[i].name === username) {
return true;
}
}
return false;
}
答案 1 :(得分:1)
我不确定我知道你要完成什么。
如果你试图突破for循环,你可以简单地使用break
命令。如果你想在for循环的所有迭代中执行一段代码,你可以这样做。
var executedElse = false;
for( ...... ){
if( some-condition ){
// do work
} else {
if( !executedElse ){
// do work
executedElse = true;
}
}
}
答案 2 :(得分:1)
或许像这样尝试
var found = false;
for (var i = 0; i < photoLikes.data.length; i++) {
if (photoLikes.data[i].name == facebook.username) {
found = true;
break;
}
}
if (found === false) {
alert("The name was not found in the array");
}
答案 3 :(得分:1)
使用break
声明:
for (var x = 0; x < photoLikes.data.length; x++) {
if (facebook.photos.indexOf(facebook.username == -1)) {
console.log("increment");
break;
}
}
您的if
条件也是错误的。它应该是:
if (facebook.photos.indexOf(facebook.username) == -1) {
...
}