我有一组类似结构的对象:
import operator
stuff = operator.itemgetter(1,4,5,6,-1)
for thing in stuff(a):
print(thing)
目前,为了找到包含目标值的对象,我遍历数组的每个元素:
var my_arr = [{property1: some_value, property2: another_value}, {}, {}, ...];
有更快的方法吗?如何直接使用目标值访问对象,而无需借助迭代?
答案 0 :(得分:1)
我认为你无论如何都需要迭代数组,但你可以尝试下划线的_.findIndex.js
答案 1 :(得分:1)
如果你只需要找一次值,那么迭代就是唯一的方法。
如果要在数组中找到许多值,可以创建一个在目标属性上键入的对象作为查找表:
var lookup = {};
for (var i = 0; i < my_arr.length; i++) {
lookup[my_arr[i].property1] = my_arr[i];
}
前面加载了一些工作,但如果你有很多查找要做,最终可以节省你的时间。
查找将如此简单:
my_obj = lookup[target_value];
如果您可以访问es2015,则可以使查找表生成更简洁:
const lookup = my_arr.reduce((m, v) => (m[v.property1] = v, m), {});
答案 2 :(得分:1)
如果您预先填充new Map
,则所有后续搜索都将在O(1)
const objMap = new Map()
for (let obj of my_arr) {
objMap.set(obj.property1, obj)
}
function getObject(target, map) {
return map.get(target)
}
答案 3 :(得分:0)
这仍将遍历数组,但您可以使用本机js find函数。
const objArray = [{ val: 1}, { val: 2}];
const targetObj = objArray.find((obj) => obj.val == 2 ) // { val: 2}