使用下划线检查数组是否包含两个值中的任何一个

时间:2017-12-21 08:54:15

标签: javascript arrays underscore.js

使用下划线的_.contains,如何检查这两个值中的任何一个?

const valueToCheckFor = undefined || false; // I really thought this would work

const arr1 = [undefined, true, undefined]
_.contains(arr1, valueToCheckFor) => // true

const arr2 = [true, true, true]
_.contains(arr2, valueToCheckFor) => // false

const arr3 = [true, true, false]
_.contains(arr3, valueToCheckFor) => // false ???

期望:

如果在数组中找到falseundefined,则值应为 true ,而false arr3 >

我不确定_.contains(arr, value)是否只能用于检查数组中的一个特定值?

4 个答案:

答案 0 :(得分:1)

在您的示例中,valueToCheckFor将被评估为false,它不会同时保存这两个值。

您需要做的是检查每个值包含一次:



const arr1 = [undefined, true, undefined]
console.log(_.contains(arr1, undefined) || _.contains(arr1, false)) // true

const arr2 = [true, true, true]
console.log(_.contains(arr2, undefined) || _.contains(arr2, false)) // false

const arr3 = [true, true, false]
console.log(_.contains(arr3, undefined) || _.contains(arr3, false)) // true

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

此表达式只会将false分配给valueToCheckFor

&#13;
&#13;
const valueToCheckFor = undefined || false;

console.log(valueToCheckFor);
&#13;
&#13;
&#13;

此外,_.contains()无法搜索多个值。

要搜索多个值,您需要一个可以接受谓词的方法,例如findfindIndexsome(下划线或香草js)。

此示例使用Array#some来迭代数组,因为一旦谓词函数返回sometrue就会返回true。谓词使用Array#includes来检查当前值是否为我们正在寻找的值。

&#13;
&#13;
const containsMultipleValues = (arr, ...values) => // the values we want to search will be collected to the values array 
  arr.some(val => values.includes(val)); // check if any item in the arr is included in the values array

const arr1 = [undefined, true, undefined]
console.log(containsMultipleValues(arr1, false, undefined))

const arr2 = [true, true, true]
console.log(containsMultipleValues(arr2, false, undefined))

const arr3 = [true, true, false]
console.log(containsMultipleValues(arr3, false, undefined))
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可能不需要下划线,可以使用Array.prototype.includes()

const arr1 = [undefined, true, undefined]
arr1.includes(undefined)  || arr1.includes(false) // true

或功能

function IsUndefOrFalse(arr){
  return arr.includes(undefined)  || arr.includes(false)
}

答案 3 :(得分:0)

您可以使用交集来检测数组中存在的可用匹配项,如下所示:

var orgArray = [ { tags : ["a1"] }, 
                 { tags : ["a2"] },
                 { tags : ["c1"] } ];
var matches = orgArray.filter(function(val) {
   return _.intersection(['a1','c1'], val.tags).length > 0;
});
console.log(matches);
console.log(matches.length);