Lodash findWhere 以对象作为键的值
Lodash findWhere with Object as value of key
我有一个对象列表,我正在尝试使用下划线 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}
_.findWhere(a, b) 应该 return {channel: {aa: "1", bb: "2"}, id: 233332} 它为这个对象数组做的有两个键但有更多填充的对象,即具有更多键和值的对象似乎不起作用,findWhere 是否有任何陷阱或我没有考虑的任何事情?
.findWhere 方法匹配对象 b 的所有属性。如果添加额外的属性,匹配将失败。但是,您可以执行以下操作:
_.findWhere(a, _.pick(b, ['channel', 'id']));
_.pick 将创建一个新对象,其中只有数组 a 中也可用的那些 key/value 对。
_.findWhere 已在 lodash v4.0.0 中弃用,因此最好将 _.find 与 _.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;
}
});
现在如果你想换个方式
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;
}
});
我有一个对象列表,我正在尝试使用下划线 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}
_.findWhere(a, b) 应该 return {channel: {aa: "1", bb: "2"}, id: 233332} 它为这个对象数组做的有两个键但有更多填充的对象,即具有更多键和值的对象似乎不起作用,findWhere 是否有任何陷阱或我没有考虑的任何事情?
.findWhere 方法匹配对象 b 的所有属性。如果添加额外的属性,匹配将失败。但是,您可以执行以下操作:
_.findWhere(a, _.pick(b, ['channel', 'id']));
_.pick 将创建一个新对象,其中只有数组 a 中也可用的那些 key/value 对。
_.findWhere 已在 lodash v4.0.0 中弃用,因此最好将 _.find 与 _.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;
}
});
现在如果你想换个方式
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;
}
});