vue 将2个数组里面得值对应起来

clipboard.png

clipboard.png
如果两个数组的id相等我就要使第一个数组里面的activeName字段改为true,我是以这个来判断他是否加入收藏,为true就是加入为false就是没有加入。后台并没有返回给我这样一个状态的字段是我自己加的。所以需要收藏的列表数组要与我i当前的俩对比id如果id相等就说明莫一条记录是收藏状态就是改写为true.
这两个数组怎么判断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);
        }
      });
    });

##
但是我这样循环后activeName这个字段的值没有被改写对,全部都是false。

阅读 5.1k
3 个回答

你这样循环不对啊,按照你的意思

判断major_id等于id的时候就使activeName字段为true

你这样循环如果倒数第二个数是匹配,设成true了,倒数第一个不匹配,那不就又是false了吗?
你可以改成for循环

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);
        }
    }
}

后台返给你的字段没有 是否收藏的字段?

//你的应该这样写。保证只有一次修改,循环的时候只是为了判断有没有
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);
  }
});
//里面可以优化的地方就是如果内循环重复了,跳出来,这样可以少判断一点。

当然我建议是改里面的为Object,major_id作为key,这样直接就能查,major_id_hash[item.major_id],如果能取到就赋值,不能的话就是false了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题