用2个值验证数组

时间:2020-06-29 09:27:23

标签: javascript arrays yup

我正在尝试验证数组具有2个特定值,例如:

['foo', 'bar']

我觉得我最接近答案的是这样的:

Yup.array()
  .of(Yup.mixed().oneOf(['foo', 'bar']))
  .min(2)
  .max(2)

但这也会通过['foo', 'foo']['bar', 'bar']

2 个答案:

答案 0 :(得分:0)

作为变体,您可以使用Yup test函数,该函数允许您使用当前字段值和另一个表单字段值进行操作。在此示例中,我们检查字段值是否具有['foo', 'foo']之类的重复项,然后检查是否没有重复项或字段数组的每个值都包含foobar

Yup.array()
  .test('contains', 'Error message here', function (value) {
      let hasDuplicate = value.some((val, i) => value.indexOf(val) !== i);
      return !hasDuplicate && value.every(el => ['foo', 'bar'].includes(el));
   })
  .min(2)
  .max(2)

在这里您可以找到有关test函数的更多信息:https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema

答案 1 :(得分:0)

您也可以为此编写一个函数。 我了解的是您正在数组中寻找2个变量。 这是我尝试过的

<?php

$data = [
      [
        "groupTaskUuid" => "98790287437987860",
        "purchaseOrderGroupTasks" => "98790287437987893"
      ],
      [
        "groupTaskUuid" => "98790287437987862",
        "purchaseOrderGroupTasks" => "98790287437987894"
      ],
      [
        "groupTaskUuid" => "98790287437987861",
        "purchaseOrderGroupTasks" => "98790287437987895"
      ]
];

$GroupTaskUuid = [
       "98790287437987862",
       "98790287437987861"
    ];

$GroupTaskUuidFlipped = array_flip($GroupTaskUuid); // make UUID values as keys
$purchaseOrderGroupTasks = [];

foreach($data as $value){
    if(isset($GroupTaskUuidFlipped[$value['groupTaskUuid']])){
        $purchaseOrderGroupTasks[] = $value['purchaseOrderGroupTasks'];
    }
}

print_r($purchaseOrderGroupTasks);

如果您正在寻找长度完全相同的数组,那么您也可以在功能上进行长度检查。 该功能看起来像

function find(arr,first,second){
let temp=false;
if(arr.includes(first)&&arr.includes(second)){
temp=true;
}
return temp;
}

find(["foo","bar"],"foo","bar");