如何检查数组中是否存在值

How to check if value existed in array or not?

本文关键字:是否 存在 数组 何检查 检查      更新时间:2023-09-26

我不想将重复的值推入selectedOwners,所以在下面的代码中,如果所有者已经存在于我不想推送的数组中selectedOwners用户正在选择所有者,我该如何检查以避免数组中的重复值?

控制.js

  var selectedOwners = [];
            $scope.addProcessOwner = function(dataItem){
              var selectedOwner = {
                  fullName: dataItem.fullName,
                  workerKey: dataItem.workerKey
              }
              if(selectedOwners.indexOf(selectedOwner) !== -1) {
                selectedOwners.push(selectedOwner);
               }
              console.log('WORKER DATA',selectedOwners);
            }
您可以使用

Array.prototype.some方法

some() 方法测试数组中的某个元素是否通过了所提供函数实现的测试。

var isExists = function(e) {
    if (e.fullName == selectedOwner.fullName
        && e.workerKey == selectedOwner.workerKey) {
        return true;
    }
}
if (!selectedOwners.some(isExists)) {
    selectedOwners.push(selectedOwner);
}

对于字符串和数字等简单类型,Array.indexOf的使用是显而易见的。

但是,当您查找对象时,您必须传递完全相同的对象。具有所有相同属性和值的不同对象仍然不起作用。将数组视为包含指向对象的指针,并且必须查找相同的指针。

相反,您需要编写自己的方法来比较所有者的相等性,并遍历执行此检查的数组。

尝试将"if"逻辑包装在for循环中。

以下代码遍历数组并检查已存在的值

for(var i = 0; i < selectedOwners.length; i++){
if(selectedOwners.indexOf(selectedOwner) !== -1) {
                selectedOwners.push(selectedOwner);
               }
}