首页 > 解决方案 > 无法读取未定义的属性“######”

问题描述

我有两个 JSON 数组$scope.pl$scope.activepage,其中包含值,

 $scope.pl = [{
   pageid: 1,
   page: "regions",
   menudId: 2
  },
  {
   pageid: 2,
   page: "countries",
   menudId: 2
  },
  {
   pageid: 3,
   page: "location",
   menudId: 2
  },
  {
   pageid: 4,
   page: "street",
   menudId: 2
  },
  {
   pageid: 5,
   page: "door",
   menudId: 2
  }
 ]
 $scope.removepl = [{
   pageid: 1,
   page: "regions",
   menuId: 2
  },
  {
   pageid: 1,
   page: "countries",
   menuId: 2
  }
 ]

现在我必须删除$scope.removepl inisde 的值$scope.pl

 for (var i = 0; i <= $scope.removepl.length; i++) {
  $scope.pagelists = _.filter($scope.pl, function(res) {
   return res.pageid !== $scope.removepl[i].pageid;
  });
  $scope.pl = $scope.pagelists;
 }

现在它工作正常,但我在控制台中遇到错误

无法读取未定义的属性“pageid”

这可能是由于$scope.removepl[i].pageid我在 for 循环中使用迭代造成的吗?

有人对此有解决方案吗?

标签: javascriptarraysangularjsmultidimensional-array

解决方案


在这里你可以做这样的事情。我已经尝试过arr1arr2进行了相应的更改。

重复的来自arr2将被删除arr1并将存储在result变量中

const arr1 = [{
   id: 1,
   page: "regions",
   menudId: 2
  },
  {
   id: 2,
   page: "countries",
   menudId: 2
  },
  {
   id: 3,
   page: "location",
   menudId: 2
  },
  {
   id: 4,
   page: "street",
   menudId: 2
  },
  {
   id: 5,
   page: "door",
   menudId: 2
  }
 ]
 const arr2 = [{
   id: 1,
   page: "regions",
   menuId: 2
  },
  {
   id: 1,
   page: "countries",
   menuId: 2
  }
 ]

var result = arr1.reduce(function (prev, value) {

    var isDuplicate = false;
    for (var i = 0; i < arr2.length; i++) {
        if (value.id == arr2[i].id) {
            isDuplicate = true;
            break;
        }
    }
    
    if (!isDuplicate) {
        prev.push(value);
    }
    
    return prev;
    
}, []);


console.log(result);


推荐阅读