我正在动态分配一个数组作为._where
中的谓词。
例如,我的自定义数组如下:
arrcolor = [red,green];
我的功能是
testfunction() {
return ._where(myMainArray, {color: arrcolor });
}
但是问题是,即使myMainArray
中有与arrcolor
值相对应的数据,也不会返回任何值。
答案 0 :(得分:0)
我不是100%地确定我了解您要实现的目标,但是据我了解:我认为myMainArray包含具有color属性的对象。您想要获得红色或绿色的对象(从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
来实现这一点,该方法返回一个新数组,该数组可以通过“过滤器功能”给出的测试。
测试将是每个对象的颜色属性是红色还是绿色。
类似这样:
const testfunction = function() {
return myMainArray.filter(obj => arrcolor.includes(obj.color));
}
完整的代码段可能类似于:
const arrcolor = ['red','green']
const myMainArray = [{
name: 'Item 1',
color: 'red'
},{
name: 'Item 2',
color: 'green'
},{
name: 'Item 3',
color: 'blue'
},{
name: 'Item 4',
color: 'red'
}];
const testfunction = function() {
return myMainArray.filter(obj => arrcolor.includes(obj.color));
}
const myColors = testfunction()
console.log(myColors);
答案 1 :(得分:0)
答案 2 :(得分:0)
_.where
使用_.isMatch
比较值,最终进行严格的相等性检查
attrs[key] === obj[key]
进行匹配。如果您传入一个数组,例如arrcolor
,则将color
中的myMainArr
属性与{{1 }}。
从本质上讲,这意味着您真正获得匹配的唯一条件是,是否使用一个对象中的属性存储与所匹配数组完全相同的数组。因此,我们假设当您执行此操作
arrcolor = ['red','green'] // JS将数组存储到某个内存位置,例如0xA19 – arrcolor是一个指针I,用于存储对该内存位置的引用
让我们假设
arrcolor
是的,你会看到的
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].color
答案 3 :(得分:0)
我不知道它是否正确,但是我做到了:
遍历 arrcolor ,然后使用以下内容:
返回._where(myMainArray,{color:arrcolor [i]});
成功了!