[英]How to compare JSON arrays and assign a fixed values
我想將“應用程序”中所有喜歡的值都更改為false,除了“ favoriteList”中的那些值之外。 我寧願在破折號中這樣做。
var apps = [{ app_ID: 1, favorite: false },{ app_ID: 2, favorite: false },{ app_ID: 3, favorite: false },{ app_ID: 4, favorite: false },{ app_ID: 5, favorite: true }] var favoriteList = [{id: 2},{id: 4}]; var updateFavorites = function(){ _(apps).forEach(function(app){ if (_.contains(favoriteList, app.app_ID){ app.favorite = true; }else{ app.favorite = false; } }) } //expected outcome is all apps.app_ID values should be false except app_ID's 2 and 4.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
我認為按數組搜索更好,所以我將favoriteList轉換為數組
var favoriteList = _.map([{id: 2}, {id: 4}], 'id');
apps = _.forEach(apps, function (el) {
el.favorite = !!~_.indexOf(favoriteList, el.app_ID);
// or
// el.favorite = _.indexOf(favoriteList, el.app_ID) > -1 ? true : false;
// this is the same, but more clearly for understanding
});
演示: http : //jsbin.com/januke/1/edit?js,console
JSPerf: http ://jsperf.com/seach-and-change-property-test
我還不太熟悉lodash,但是看來您的代碼還差得遠:
var updateFavorites = function(){
_(apps).forEach(function(app){
app.favorite = !!_.find(favoriteList, { 'id': app.app_ID });
})
};
當沒有結果時,find返回array或undefined。 !! 是雙重否定(隱式轉換為布爾值)。 所以!! undefined === false,!! ['anythingorevennothing'] === true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.