Lodash findWhere 以 Object 作为键值

lbo*_*yel 0 lodash

我有一个对象列表,我正在尝试使用下划线 findwhere 函数在列表中查找一个对象,其中一个键和另一个对象作为其值。我试过这样做,但得到一个未定义的值。所以我的问题是下划线 findwhere 可用于查找具有另一个对象的值的键的对象,而不是字符串或数字。示例代码。

var a = [
  {channel: {aa: "1", bb: "2"}, id: 233332},
  {channel: {aa: "3", bb: "4"}, id: 822211}
]

var b = {channel: {aa: "1", bb: "2"}, id: 233332}
Run Code Online (Sandbox Code Playgroud)

_.findWhere(a, b) 应该返回 {channel: {aa: "1", bb: "2"}, id: 233332} 它对具有两个键但填充更多的对象即一个的对象数组所做的有更多的键和值,它似乎不起作用,findWhere 有什么问题或我没有考虑过的任何事情吗?

Rah*_*hul 5

_.findWhere 在 lodash v4.0.0 中已被弃用,因此最好将 _.find 与 _.matches 一起使用。

lodash _.matches

var a = [
  {channel: {aa: "3", bb: "4"}, id: 822211},
  {channel: {aa: "1", bb: "2"}, id: 233332}
];

var b = {channel: {aa: "1", bb: "2"}, id: 233332, desc:"Hello"};
_.find(a, function(n){
    if(_.matches(n)(b)){
       return n;
    }
});
Run Code Online (Sandbox Code Playgroud)

jsFiddle with lodash v3.1.0

现在如果你想要其他方式

var a = [
  {channel: {aa: "3", bb: "4"}, id: 822211, desc:"Hello"},
  {channel: {aa: "1", bb: "2"}, id: 233332, desc:"Hello"}
];

var b = {channel: {aa: "1", bb: "2"}, id: 233332};
_.find(a, function(n){
    if(_.matches(b)(n)){
       return n;
    }
});
Run Code Online (Sandbox Code Playgroud)

jsFiddle with lodash v3.1.0