Javascript .\其中传递数组作为谓词值

Javascript .\其中传递数组作为谓词值,javascript,underscore.js,Javascript,Underscore.js,我在\u中动态地为谓词分配一个数组,其中 例如,我的定制阵列如下所示: arrcolor = [red,green]; 我的功能是 testfunction() { return ._where(myMainArray, {color: arrcolor }); } 但问题是,它没有返回任何值,即使myMainArray中有与arrcolor值相对应的数据。我不能100%确定我是否理解您要实现的目标,但正如我理解的那样:我认为myMainArray包含具有颜色属性的对象。您希望获得红

我在
\u中动态地为谓词分配一个数组,其中

例如,我的定制阵列如下所示:

arrcolor = [red,green];
我的功能是

testfunction() {
    return ._where(myMainArray, {color: arrcolor });
}

但问题是,它没有返回任何值,即使
myMainArray
中有与
arrcolor
值相对应的数据。

我不能100%确定我是否理解您要实现的目标,但正如我理解的那样:我认为myMainArray包含具有颜色属性的对象。您希望获得红色或绿色(由arrcolor提供)的对象

因此,myMainArray可以如下所示:

const myMainArray = [{
  name: 'Item 1',
  color: 'red'
},{
  name: 'Item 2',
  color: 'green'
},{
  name: 'Item 3',
  color: 'blue'
},{
  name: 'Item 4',
  color: 'red'
}];
由于
arrcolor=['red'、'green']
您需要myMainArray中的项目1、项目2和项目4

您可以通过在myMainArray上使用
.filter
来实现这一点,它返回一个通过“filter函数”给出的测试的新数组

测试将是每个对象的颜色属性为红色或绿色

比如:

const testfunction = function() {
  return myMainArray.filter(obj => arrcolor.includes(obj.color));
}
完整的代码段可能类似于:

const testfunction = function() {
  return myMainArray.filter(obj => arrcolor.includes(obj.color));
}
const arrcolor=['red','green']
常量mymain数组=[{
名称:“项目1”,
颜色:“红色”
},{
名称:“项目2”,
颜色:“绿色”
},{
名称:“项目3”,
颜色:“蓝色”
},{
名称:“项目4”,
颜色:“红色”
}];
const testfunction=函数(){
返回myMainArray.filter(obj=>arrcolor.includes(obj.color));
}
const myColors=testfunction()

控制台日志(myColors)在已去除润滑的地方,我认为您需要使用_过滤器:

_.filter(items, {color: myColor})

请参见
上的本期。其中
使用
.isMatch
来比较值,这最终会进行严格的相等性检查

attrs[key] === obj[key]
进行匹配。如果您传入一个数组,比如说,
arrcolor
,您将比较
myMainArr
中的
color
属性与
arrcolor
的引用

这本质上意味着,只有当一个对象中的属性用于存储与要匹配的数组完全相同的数组时,才能真正获得匹配。那么,让我们假设当你这么做的时候

arrcolor=['red','green']//JS将此数组存储到某个内存位置,比如0xA19–arrcolor是一个指针I,它存储对该内存位置的引用

让我们假设

myMainArray[0].color = ['red', 'green'] // And here JS stores this NEW array to some other memory location, say 0xA1F
他们是,你会看到的

myMainArray[0].color === arrcolor // false
因为相等运算符(
=
或`===)只会比较引用,而不会比较数组中的值

最后,如果您只想筛选同时具有两种颜色的
myMainArray
项,假设
myMainArray[0]。颜色是一个颜色数组,您可以使用以下方法

_.filter(myMainArray, function (item) {
  return _.all(arrcolor, function (color) {
    return _.any(item.color, function (mainColor) { return mainColor == color; });
  })
})

我不知道这是否正确,但我已经做到了:

循环通过arrcolor,然后使用以下内容:

return._其中(myMainArray,{color:arrcolor[i]})


成功了

你能添加一段你正在尝试的东西吗?如果是字符串数组,为什么要像对象一样搜索?还有什么是
它应该是
不是在哪里?你的“myMainArray”看起来怎么样?