._where将数组作为谓词值

时间:2018-08-18 23:25:46

标签: javascript underscore.js

我正在动态分配一个数组作为._where中的谓词。

例如,我的自定义数组如下:

arrcolor = [red,green];

我的功能是

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

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

4 个答案:

答案 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)

在哪里描述过,我想您要使用_filter:

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

github上看到此问题

答案 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]});

成功了!