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

不知道发布规则,但我会告诉你,这是一个重复的问题this one,但我问是否这是“最佳实践”的方式来做到这一点?更有效的方法来搜索JavaScript对象的数组?

回答:

这是直接做到这一点。如果您需要多次快速访问,则应该创建一个由您正在搜索的属性名称作为键的映射。

这是一个函数,它接受数组并创建键控映射。这不是全能的,但你应该能够修改它以供自己使用。

/** 

* 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;

};

回答:

@jondavidjohn - 您可以使用此javascript LIB,DefiantJS(http://defiantjs.com),使用它可以过滤的JSON结构使用XPath匹配。把它放在JS代码:

var data = [ 

{

"restaurant": {

"name": "McDonald's",

"food": "burger"

}

},

{

"restaurant": {

"name": "KFC",

"food": "chicken"

}

},

{

"restaurant": {

"name": "Pizza Hut",

"food": "pizza"

}

}

].

res = JSON.search(data, '//*[food="pizza"]');

console.log(res[0].name);

// Pizza Hut

这是一个工作的小提琴;
http://jsfiddle.net/hbi99/weKVL/

DefiantJS使用方法“search”扩展全局对象,并返回一个带匹配的数组(如果没有找到匹配,则返回一个数组)。您可以在这里使用XPath Evaluator来试用lib和XPath查询:

http://www.defiantjs.com/#xpath_evaluator

以上是 更有效的方法来搜索JavaScript对象的数组? 的全部内容, 来源链接: utcz.com/qa/264418.html

回到顶部