簡體   English   中英

如何比較JSON數組並分配固定值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM