如何在Javascript中根据特定条件从数组中移除一行

3

我有一个名为userList的数组,并通过循环将一些数据推入其中...

userList.push({
  userProfileID : dataEntry.UserProfileID ,
  isAgent       : dataEntry.isAgent       ,
  firstName     : dataEntry.firstName     ,
  roleNames     : dataEntry.roleNames
})

输出将会是这样,以及100条更多的记录。
0: Object {userProfileID: "68670", isAgent: false, firstName: "ARSDEO", roleNames:"Deo Role"}
1: Object {userProfileID: "68672", isAgent: false, firstName: "ARSBM101", roleNames:"BM Role"}
2:.......
3:.......

我想要从userList数组中移除roleNames = 'BM role'的条目。

我尝试过以下代码:

userList = userList.filter(item => userList.roleNames == 'BM Role');

但是我在数组中没有记录。请给出建议...


filter 不会移除任何元素,它只是创建一个新的数组。如果要移除一个元素,请使用 splice - RobG
5个回答

7

几乎达成了。

您希望检查item上的属性rolesNames是否 不等于 "BM Role" (即您想要过滤掉这些内容)。

const newList = userList.filter(item => item.roleNames !== 'BM Role');

注意:filter,和其他函数式数组方法mapreduce一样,不会改变原来的数组,它返回一个新的数组,其中只包含符合回调函数条件的元素。

3
尝试检查roleNames是否与'Bm Role'不相等。
userList = userList.filter((user) => {
    return user.roleNames !== 'BM role';
})

顺便提一句filter()方法创建原始数组的副本。

但如果您想直接从原始数组中删除,我建议您使用splice()方法:

for(let i = 0; i < userList.length; i++){ 
   if (userList[i].roleNames === 'BM Role') {
      userList.splice(i, 1); 
      i--;
   }
}

2

如果问题是关于从用户列表中删除元素:

var userList = 
[ { userProfileID: '68670', isAgent: false, firstName: 'ARSDEO', roleNames: 'Deo Role' } 
, { userProfileID: '68672', isAgent: false, firstName: 'aaaaaa', roleNames: 'aaa Role' } 
, { userProfileID: '68674', isAgent: false, firstName: 'bbbbbb', roleNames: 'BM Role'  } 
, { userProfileID: '68676', isAgent: false, firstName: 'cccccc', roleNames: 'BM Role'  } 
, { userProfileID: '68678', isAgent: false, firstName: 'dddddd', roleNames: 'bbb Role' } 
] 
  

for (let i=userList.length;i--;)  // start from end to zero
{
  if (userList[i].roleNames==='BM Role') { userList.splice(i, 1) }
}

for (let elm of userList ) { console.log( JSON.stringify(elm) )  }


1

您应该使用item.roleNames而不是userList.roleNames,因为roleNames是数组中特定对象/项的一部分,而不是数组本身。 此外,您可能应该使用item.roleNames != 'BM Role',因为filter返回一个包含匹配项的数组,而您想要删除匹配的项。


1
您的过滤器不正确:

userList = userList.filter(item => item.roleNames != 'BM Role');

变量"item"是您正在进行检查的内容。在每次过滤调用时,一个新的"item"被传递到函数中,并且这就是所评估的内容。


1
OP想要一个过滤后的项目列表,其中不包含BM角色。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接