鍍金池/ 問答/HTML/ vue 將2個數(shù)組里面得值對應(yīng)起來

vue 將2個數(shù)組里面得值對應(yīng)起來

clipboard.png

clipboard.png
如果兩個數(shù)組的id相等我就要使第一個數(shù)組里面的activeName字段改為true,我是以這個來判斷他是否加入收藏,為true就是加入為false就是沒有加入。后臺并沒有返回給我這樣一個狀態(tài)的字段是我自己加的。所以需要收藏的列表數(shù)組要與我i當(dāng)前的倆對比id如果id相等就說明莫一條記錄是收藏狀態(tài)就是改寫為true.
這兩個數(shù)組怎么判斷major_id等于id的時候就使activeName字段為true:

    _this.listWish.forEach(function(a) {
      _this.major.forEach(function(item) {
        if (item.major_id == a.id) {
          _this.$set(a, 'activeName', true);
          _this.$set(a, 'wishId', item.wish_id);
        } else {
          _this.$set(a, 'activeName', false);
        }
      });
    });

##
但是我這樣循環(huán)后activeName這個字段的值沒有被改寫對,全部都是false。

回答
編輯回答
尕筱澄

你這樣循環(huán)不對啊,按照你的意思

判斷major_id等于id的時候就使activeName字段為true

你這樣循環(huán)如果倒數(shù)第二個數(shù)是匹配,設(shè)成true了,倒數(shù)第一個不匹配,那不就又是false了嗎?
你可以改成for循環(huán)

for(let i = 0; i < _this.listWish.length; i ++){
    for(let j = 0; i < _this.major.length; j ++){
        if (item.major_id == a.id) {
            _this.$set(a, 'activeName', true);
            _this.$set(a, 'wishId', item.wish_id);
            break;
        } else {
            _this.$set(a, 'activeName', false);
        }
    }
}
2018年7月24日 16:11
編輯回答
心沉

后臺返給你的字段沒有 是否收藏的字段?

2018年7月31日 05:25
編輯回答
朕略傻
//你的應(yīng)該這樣寫。保證只有一次修改,循環(huán)的時候只是為了判斷有沒有
var _tag = false;
_this.listWish.forEach(function(a) {
  _tag = false;
  _this.major.forEach(function(item) {
    if (item.major_id == a.id) {
      _tag  = item.wish_id
    }
  });
  if(_tag){
      _this.$set(a, 'activeName', true);
      _this.$set(a, 'wishId', _tag);
  } else {
      _this.$set(a, 'activeName', false);
  }
});
//里面可以優(yōu)化的地方就是如果內(nèi)循環(huán)重復(fù)了,跳出來,這樣可以少判斷一點。

當(dāng)然我建議是改里面的為Object,major_id作為key,這樣直接就能查,major_id_hash[item.major_id],如果能取到就賦值,不能的話就是false了。

2017年4月8日 20:28