这是我的第一个问题。我有一个代码,我试图将对象添加到本地存储中的数组。如果它已经存在,我检查它并想要停止循环。但是,这仅发生在循环为空时创建的第一个元素上。你能不能请看看我的代码,看看我做错了什么。我试过了:
函数中的参数是从其他函数获取变量,我正在使用AJAX来获取一些数据。我知道forEach不接受return语句,这就是代码被注释掉的原因。
提前致谢 代码:
var counter = 0;
function bookmarkNewsSource(that, x, data, newsName) {
myBookmark = {
count: counter,
imgNum: x,
id: data.sources[x].id,
name: data.sources[x].name
};
// check if fullTask already exists
if (localStorage.getItem("bookmarks") === null) {
//if not init array
var bookmarks = [];
//add to an array
bookmarks.push(myBookmark);
counter++;
//set localstorage and convert object to a string
localStorage.setItem("bookmarks", JSON.stringify(bookmarks));
} else {
var bookmarks = JSON.parse(localStorage.getItem("bookmarks"));
// bookmarks.forEach((bookmark, index, array) => {
// console.log(bookmark, index);
// if (newsName == bookmark.name) {
// return 'done';
// } else {
// bookmarks.push(myBookmark);
// localStorage.setItem("bookmarks", JSON.stringify(bookmarks));
// counter++;
// }
// });
bookmarks.some((bookmark) => {
if (newsName == bookmark.name) {
console.log('yes', newsName);
return false;
} else {
JSON.parse(localStorage.getItem("bookmarks"));
bookmarks.push(myBookmark);
localStorage.setItem("bookmarks", JSON.stringify(bookmarks));
counter++;
}
});
}
}
答案 0 :(得分:0)
你几乎是正确的,只需要在找到匹配并希望循环停止时返回true
。在MDN Array.prototype.some() -
some()
为每个存在的元素执行一次回调函数 在数组中,直到找到一个回调返回 truthy值的。 如果找到这样的元素,some()
会立即返回true
var bookmarks = JSON.parse(localStorage.getItem("bookmarks"));
var isPresent = bookmarks.some((bookmark) => {
if (newsName == bookmark.name) {
console.log('Match Found', newsName);
return true; //Exit loop and stop going through further elements.
}
});
if (!isPresent) {
bookmarks.push(myBookmark);
localStorage.setItem("bookmarks", JSON.stringify(bookmarks));
counter++;
}