Javascript 如何按特定Id删除内部子对象?
下面是我的json结构:Javascript 如何按特定Id删除内部子对象?,javascript,angularjs,Javascript,Angularjs,下面是我的json结构: $scope.dataList = [{ CompanyName: null, Location: null, Client: [{ ClientId: 0, ClientName: null, Projects:{ Id: 0, Name: null, } }] }]; 我正试图通过从客户列表中删除特定客户ID的客户数据,但没有删除客户数据,也没有收到任何类型
$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”函数使代码更具可读性。