_.where(list, properties);
查看列表中的每个值,返回包含属性中列出的所有键值对的所有值的数组。
基本上你给它一个对象作为list
,并将'键值对'作为properties
传递。这些“键值对/属性”是您用来告诉where
取出和返回的标记。
话虽如此,我尝试了以下内容:
var obj = {
innerObj1 : {
speak: function(){console.log('My name is ' + name);},
name: "Tiger",
space: 7
},
innerObj2 : {
speak: function(){console.log('My name is ' + name);},
name: "Tiger2",
space: 1
},
innerOnj3 : {
speak: function(){console.log('My name is ' + name);},
name: "Tiger3",
space: 3},
innerObj4 : {
speak: function(){console.log('My name is ' + name);},
name: "Tiger4",
space: 3}
};
返回:
_.where(obj,{speak:function(){console.log('My name is ' + name);}});
[] //returns a empty array, WHAT?!
VS
function speak(){console.log('My name is ' + name);}
var obj = {
innerObj1 : {
speak: speak,
name: "Tiger",
space: 7
},
innerObj2 : {
speak: speak,
name: "Tiger2",
space: 1
},
innerOnj3 : {
speak: speak,
name: "Tiger3",
space: 3},
innerObj4 : {
speak: speak,
name: "Tiger4",
space: 3}
};
_.where(obj,{speak:speak});
这将返回:
[Objectname: "Tiger"space: 7speak: speak()__proto__: Object, Objectname: "Tiger2"space: 1speak: speak()__proto__: Object, Objectname: "Tiger3"space: 3speak: speak()__proto__: Object, Objectname: "Tiger4"space: 3speak: speak()__proto__: Object]
这就是我的困惑所在。为什么第一个方法只返回一个空对象,但第二个方法返回你期望的...
我知道这个question,但它对我的困惑没有帮助...... 提前谢谢!
答案 0 :(得分:2)
这实际上是一个非常好的预期结果。
您可以在第一个示例中看到为每个对象创建一个新函数,以便:
innerObj1.speak !== innerObj2.speak
。该函数可能看起来是相同的,但它是一个不同的对象。不仅所有speak
值彼此不同,它们也与您在_.where()
函数中作为值传递的(也是新的!)函数不同。
在第二个示例中,您定义了一个函数并引用来自每个对象的所有innerObj1.speak === innerObj2.speak
,因为所有speak
属性都引用相同的函数。
看看:Fiddle