Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按特定Id删除内部子对象?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何按特定Id删除内部子对象?

Javascript 如何按特定Id删除内部子对象?,javascript,angularjs,Javascript,Angularjs,下面是我的json结构: $scope.dataList = [{ CompanyName: null, Location: null, Client: [{ ClientId: 0, ClientName: null, Projects:{ Id: 0, Name: null, } }] }]; 我正试图通过从客户列表中删除特定客户ID的客户数据,但没有删除客户数据,也没有收到任何类型

下面是我的json结构:

$scope.dataList = [{
   CompanyName: null,
   Location: null,
   Client: [{
      ClientId: 0,
      ClientName: null,
      Projects:{
         Id: 0,
         Name: null,
      }
   }]
}];
我正试图通过
从客户列表中删除特定客户ID的客户数据
,但没有删除客户数据,也没有收到任何类型的错误

代码:

for (var i = 0; i < $scope.dataList.length; i++)
            {
                for (var j = 0; j < $scope.dataList[i].Client.length; j++)
                {
                    if ($scope.dataList[i].Client[j].ClientId == 101)
                    {
                       $scope.dataList[i].Client.splice(j, 1);
                    }     
                }
            }
for(变量i=0;i<$scope.dataList.length;i++)
{
对于(var j=0;j<$scope.dataList[i].Client.length;j++)
{
if($scope.dataList[i].Client[j].ClientId==101)
{
$scope.dataList[i].Client.splice(j,1);
}     
}
}

有人能告诉我我的代码有什么问题吗???

你可以使用delete语句来解决这个问题

for (var i = 0; i < $scope.dataList.length; i++)
            {
                for (var j = 0; j < $scope.dataList[i].Client.length; j++)
                {
                    if ($scope.dataList[i].Client[j].ClientId == 101)
                    {
                       delete $scope.dataList[i].Client[j];
                    }     
                }
            }
for(变量i=0;i<$scope.dataList.length;i++)
{
对于(var j=0;j<$scope.dataList[i].Client.length;j++)
{
if($scope.dataList[i].Client[j].ClientId==101)
{
删除$scope.dataList[i].Client[j];
}     
}
}
但当您删除时,这将产生问题,因为在for循环中删除一个项目,所以项目数量会减少


所以你必须用另一种方法

您可以为此使用delete语句

for (var i = 0; i < $scope.dataList.length; i++)
            {
                for (var j = 0; j < $scope.dataList[i].Client.length; j++)
                {
                    if ($scope.dataList[i].Client[j].ClientId == 101)
                    {
                       delete $scope.dataList[i].Client[j];
                    }     
                }
            }
for(变量i=0;i<$scope.dataList.length;i++)
{
对于(var j=0;j<$scope.dataList[i].Client.length;j++)
{
if($scope.dataList[i].Client[j].ClientId==101)
{
删除$scope.dataList[i].Client[j];
}     
}
}
但当您删除时,这将产生问题,因为在for循环中删除一个项目,所以项目数量会减少

所以你必须用另一种方法

这是有效的:

for (var i = 0; i < $scope.dataList.length; i++) {
  for (var j = 0; j < $scope.dataList[i].Client.length; j++) {
    var foundIndex;
    if ($scope.dataList[i].Client[j].ClientId == 101){
      foundIndex = j;
    }
    $scope.dataList[i].Client.splice(j, 1);
  }
}
for(变量i=0;i<$scope.dataList.length;i++){
对于(var j=0;j<$scope.dataList[i].Client.length;j++){
var指数;
if($scope.dataList[i].Client[j].ClientId==101){
foundIndex=j;
}
$scope.dataList[i].Client.splice(j,1);
}
}
小提琴:

这个作品:

for (var i = 0; i < $scope.dataList.length; i++) {
  for (var j = 0; j < $scope.dataList[i].Client.length; j++) {
    var foundIndex;
    if ($scope.dataList[i].Client[j].ClientId == 101){
      foundIndex = j;
    }
    $scope.dataList[i].Client.splice(j, 1);
  }
}
for(变量i=0;i<$scope.dataList.length;i++){
对于(var j=0;j<$scope.dataList[i].Client.length;j++){
var指数;
if($scope.dataList[i].Client[j].ClientId==101){
foundIndex=j;
}
$scope.dataList[i].Client.splice(j,1);
}
}

Fiddle:

您确定执行了
$scope.dataList[i].Client.splice(j,1)可能永远不会进入ifcondition@gianlucatursi太棒了。是的,这就是问题所在。谢谢。只有一个问题,那就是不使用循环就可以移除吗?我不认为。可以使用
下划线
来获得更好的代码。是否确实执行了
$scope.dataList[i].Client.splice(j,1)可能永远不会进入ifcondition@gianlucatursi太棒了。是的,这就是问题所在。谢谢。只有一个问题,那就是不使用循环就可以移除吗?我不认为。您可以使用
下划线
来获得更好的代码。这是否可能在不使用for循环的情况下实现,而是使用一些内置函数来实现???据我所知。但您可以使用lodash或下划线之类的库,通过使用“each”和“filter”函数使代码更具可读性。这是否可能在不使用for循环的情况下实现,而是使用一些内置函数来实现???据我所知,这是不可能的。但您可以使用lodash或下划线等库,通过使用“each”和“filter”函数使代码更具可读性。