我有一个共同的问题,我想知道是否有人有更好的解决方法,然后到目前为止我一直在做的事情。
我想遍历数组以查找对象并更新它。如果该对象不存在,我想将它附加到数组。我经常处理更复杂的对象,这使得问题更加复杂。
<div ng-controller ="getprofile">
<div class="row"><div id="grid">
<!-- loop images scope variable -->
<fieldset>
<div class="col-xs-3 thumbnail" ng-repeat="imageUrl in images">
<img src="" ng-src="{{imageUrl}}" ng-model="choice.course">
</div>
</fieldset>
</div></div>
</div>
有更好的方法可以做到这一点,还是使用旗帜作为最佳选择?谢谢!
答案 0 :(得分:1)
我同意使用.find()
,但你不应该改变测试功能中的任何数据。相反,使用它来查找项目并根据它返回的内容(电影或undefined
)进行操作。
function createOrUpdate(draftMovie) {
var film = movies.find(function(savedMovie){
return savedMovie._id == draftMovie._id;
})
if(film){
return film.title = draftMovie.title;
} else {
return myTheater.currentMovies.push(draftMovie);
}
}
有关此.find()
的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
答案 1 :(得分:1)
首先,您会发现电影是否包含ID 如果它包含您更新,否则您只需按 aMovie
以前,您动态创建一个id数组,以便轻松了解电影是否包含ID及其所在位置:
var movies = [
{ id: 1, title:"Movie 1" },
{ id: 2, title: "Another Movie" }
];
var aMovie = { id: 3, title: "Something New" };
var index = movies.map(x => x.id).indexOf(aMovie.id);
if (index !== -1) movies[index].title = aMovie.title;
else movies.push(aMovie);
console.log(movies);
答案 2 :(得分:1)
像这样使用原生Array.prototype.find:
var movies = [{ _id: 1, title:"Movie 1" }, { _id: 2, title: "Another Movie" }];
var myTheater = { location:"here", current_movies: movies };
var aMovie = { _id: 3, title: "Something New" };
// check if there is a movie with the same id as aMovie
var found = myTheater.current_movies.find(m => m._id == aMovie._id);
if(found) // if we found something
found.title = aMovie.title; // update it's title
else
/*things to do if nothing was found*/
console.log("nothing found!");
&#13;
箭头功能:
我传递给find
的函数(回调)称为Arrow Function。你可以使用这样的常规函数调用find
:
var found = myTheater.current_movies.find(function(m) {
return m._id == aMovie._id;
});
答案 3 :(得分:0)
您可以使用Array.find
检查并更新电影是否存在,如果不存在则更新
var movies = [{ _id: 1, title:"Movie 1" },
{ _id: 2, title: "Another Movie" }
];
var myTheater = { location:"here", current_movies: movies };
var aMovie = { _id: 1, title: "Something New" };
var movie = myTheater.current_movies.find(function(x){
if(x._id===aMovie._id){
console.log("Updating movie name.");
x.title = aMovie.title;
return true;
}
});
if(!movie){
myTheater.current_movies.push(aMovie);
}
答案 4 :(得分:-1)
只使用id或其他属性作为标识,所以如果最后一个条目是100,那么你不必寻找101.你可以检查数组的大小或循环通过它并比较id的值,如果它不在那里你可以插入它。虽然javascript可能已经有了这样做的功能。