function getByValue4(arr, value) {
var o;
for (var i=0, iLen=arr.length; i<iLen; i++) {
o = arr[i];
for (var p in o) {
if (o.hasOwnProperty(p) && o[p] == value) {
return o;
}
}
}
}
collection (Array|Object): The collection to inspect.
[predicate=_.identity] (Function): The function invoked per iteration.
[fromIndex=0] (number): The index to search from.
返回
(*): Returns the matched element (in your case, {a: 5, b: 6}), else undefined.
17 回答
要访问第三个对象,请使用:
jsObjects[2];
要访问第三个对象b值,请使用:
jsObjects[2].b;
要通过特定属性值从对象数组中获取第一个对象:
我不知道为什么你反对for循环(大概你的意思是for循环,而不是专门用于..in),它们快速且易于阅读 . 无论如何,这里有一些选择 .
对于循环:
. 过滤
.forEach
另一方面,如果您确实想要...而想要查找具有值为6的任何属性的对象,则必须使用for..in,除非您传递名称以进行检查 . 例如
OK, 有几种方法可以做到这一点,但让我们从最简单的方法和最新方法开始,这个函数叫做
find()
.使用
find
时要小心,因为即使是IE11也不支持它,所以需要进行转换...所以你有这个对象,如你所说:
你可以编写一个函数并得到它:
并使用这样的功能:
同样在 ES6 中甚至缩短版本:
此方法仅返回匹配...的第一个值,为了获得更好的结果和浏览器支持,您可以使用
filter
:我们将返回
[{a: 5, b: 6}]
...这个方法将返回一个数组而不是......
你也可以简单地使用循环,创建一个这样的函数:
并称之为:
只是将this answer的最快/最佳部分改进为更可重用/清晰:
会更好,使用返回过滤器有时你不能得到结果(我不知道为什么)
来自MDN:
附注:旧版浏览器(如IE)不支持
find()
和箭头函数等方法,因此如果要支持这些浏览器,则应使用Babel来转换代码 .使用find with bind将特定键值传递给回调函数 .
如果您正在寻找单个结果,而不是数组,我可以建议减少吗?
这是一个简单的'ole javascript中的解决方案,如果存在匹配对象,则返回匹配对象,否则返回null .
尝试Array filter方法使用
property
过滤array of objects
.using array filter method:
using for in loop :
Working fiddle : https://jsfiddle.net/uq9n9g77/
如果我理解正确,你想找到
b
属性为6
的数组中的对象?或者,如果您使用下划线:
请参阅此文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
示例:
您可以将它与箭头功能一起使用,如下所示:
使用underscore.js:
Filter
对象数组,其属性与value匹配,返回数组:见MDN Docs on Array.prototype.filter()
Find
数组中第一个元素/对象的值,否则返回undefined
.见MDN Docs on Array.prototype.find()
看起来在ECMAScript 6提案中有
Array
方法find()
和findIndex()
. MDN还提供了polyfills,您可以包含这些polyfill以在所有浏览器中获得这些功能 .find():
findIndex():
如何使用lo-dash的lo-dash来通过对象属性值从对象数组中获取对象 . 你可以这样做:
参数:
返回
在性能方面,
_.find()
更快,因为它只用属性{'b': 6}
拉第一个对象,另一方面,如果假设你的数组包含多个具有匹配属性集(key:value)的对象,那么你应该考虑使用_.filter()
方法 . 所以在你的情况下,由于你的数组有一个具有这个属性的对象,我会使用_.find()
.