对象数组:访问对象的值而不迭代数组

时间:2018-01-18 23:36:55

标签: javascript arrays object

我有一组类似结构的对象:

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}, {}, {}, ...];

有更快的方法吗?如何直接使用目标值访问对象,而无需借助迭代?

4 个答案:

答案 0 :(得分:1)

我认为你无论如何都需要迭代数组,但你可以尝试下划线的_.findIndex.js

http://underscorejs.org/#findIndex

答案 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}