如果for循环找不到我想要的东西,请做点什么

时间:2017-02-04 08:00:54

标签: javascript arrays javascript-objects

我有一个共同的问题,我想知道是否有人有更好的解决方法,然后到目前为止我一直在做的事情。

我想遍历数组以查找对象并更新它。如果该对象不存在,我想将它附加到数组。我经常处理更复杂的对象,这使得问题更加复杂。

    <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>

有更好的方法可以做到这一点,还是使用旗帜作为最佳选择?谢谢!

5 个答案:

答案 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

&#13;
&#13;
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;
&#13;
&#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可能已经有了这样做的功能。