更有效的搜索javascript对象数组的方法?

jon*_*ohn 2 javascript arrays search json

不知道发帖规则,但我会告诉你,出了大门,这是一个重复的问题这一个,但我问这是否是"最佳实践"的方式来做到这一点?

Jua*_*des 7

这是直截了当的做法.如果您需要多次快速访问,则应创建一个由您正在搜索的属性名称键入的地图.

这是一个采用数组和构建键控映射的函数.这不是万能的,但你应该能够修改它以供自己使用.

/**
 * Given an array and a property name to key by, returns a map that is keyed by each array element's chosen property
 * This method supports nested lists
 * Sample input: list = [{a: 1, b:2}, {a:5, b:7}, [{a:8, b:6}, {a:7, b:7}]]; prop = 'a'
 * Sample output: {'1': {a: 1, b:2}, '5': {a:5, b:7}, '8': {a:8, b:6}, '7':{a:7, b:7}}
 * @param {object[]} list of objects to be transformed into a keyed object
 * @param {string} keyByProp The name of the property to key by
 * @return {object} Map keyed by the given property's values
 */
function mapFromArray (list , keyByProp) {
  var map = {};
  for (var i=0, item; item = list[i]; i++) {
    if (item instanceof Array) {
      // Ext.apply just copies all properties from one object to another,
      // you'll have to use something else. this is only required to support nested arrays.
      Ext.apply(map, mapFromArray(item, keyByProp));
    } else {
      map[item[keyByProp]] = item;
    }
  }
  return map;
};
Run Code Online (Sandbox Code Playgroud)