knockout.js 搜索Knockout Array中的重复条目

bgtovc5b  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(182)

我有一个名为self.Employees的KO数组,它有一个显示在屏幕上的用户名列表。用户可以在系统中输入新的用户名,如果名称已经在数组中,我想抛出一个错误。如果文本框为空,我可以抛出一个错误,但是我似乎不能正确地进行搜索。下面是我尝试过的代码。

var employeeList = [
    new Employee(1, "Jack Johnson"),
    new Employee(2, "Alice Smith"),
    new Employee(3, "Clark Kent"),
    new Employee(4, "Bruce Banner"),
    new Employee(5, "Alan Moore")
  ];

自我.雇员= ko.可观察数组(雇员列表)//要求!

var match = ko.utils.arrayFirst(self.Employees, function(item)
        {
          return item.employeeName == employee.Name;
        });

    if(match === employee.Name) {
        self.error("Duplicate entry.");
        return;
      }

      // Check if a field is blank before adding to array THIS WORKS
      if(employee.Name == "") {
        self.error("A new employee name is required.");
        return;
      }
      else {
        self.error("");
      }
k5hmc34c

k5hmc34c1#

我认为您的代码的问题在于match被设置为employee对象,因此不能像下面这样进行比较:

// Wrong
if (match === employee.Name) { }

相反,您可以尝试:

// Right
if (match && match.Name === employee.Name) { }

如果您想做更多的重构,我建议将newEmployeeValid实现为pureComputed属性。
第一个

jfgube3f

jfgube3f2#

您可以尝试使用“some”函数来检查它是否存在于对象数组中。它可能也会更干净。

var name = "check if this name exists"

var itExists = arrayOfObjects.some(employee => employee.name === name);

如果name作为任何雇员的姓名出现在对象数组中,则会出现这种情况

相关问题