在Javascript中搜索关联数组/哈希
我有一个像这样的数组在Javascript中搜索关联数组/哈希,javascript,jquery,Javascript,Jquery,我有一个像这样的数组 var data = [ {"target": "production", "datapoints": [[165.0, 136], [141.0, 176], [null, 176]]}, {"target": "test", "datapoints": [[169.0, 100], [151.0, 160], [null, 120]]}, {"target": "backup", "datapoints": [[1.0, 130], [32.0, 120], [1
var data = [
{"target": "production", "datapoints": [[165.0, 136], [141.0, 176], [null, 176]]},
{"target": "test", "datapoints": [[169.0, 100], [151.0, 160], [null, 120]]},
{"target": "backup", "datapoints": [[1.0, 130], [32.0, 120], [13.0, 130]]}
]
是否可以搜索此数组以返回包含例如“production”
我看了这个,但不知道怎么用 不确定这是否是你的意思,但试试这个:
for(var i=0;i<data.length;i++)
if(data[i].target=='production')
return data[i]
// or do something else/more
(变量i=0;i)的
我不建议在大型阵列上使用此功能,但它应该适合您,或者让您走上正确的轨道。您可以:
var target = "production";
var result = $.grep(data, function(e){ return e.target == target; });
console.log(result);
尝试此功能:
var getDataByTarget = function (target) {
var ret = false;
$.each(data, function () {
if (this.target == target) {
ret = this;
return false;
}
});
return ret;
};
Fiddle:您提到了关联数组,就这样吧
如果您正在对该数据进行一次性读取(允许稍后修改)和多次搜索,那么将数组转换为Javascript对象(成为关联数组)就足够了:
每次在数组上循环时都会有O(1)复杂度,O(n/2)=>O(n)。这将大大加快对该数据的搜索速度。但这仅在数据读取一次并搜索多次时才有意义。当然,可以稍后添加新的哈希/目标,也可以更改现有哈希/目标
因此,在您的情况下,您只需通过
您将获得与此哈希/目标关联的整个对象
注意:这仅在具有唯一哈希/目标名称的情况下有效。每当有多个具有相同哈希/目标的对象时,将返回最后一个对象。以下是当数组中有多个具有相同目标/哈希的对象时的解决方案
每个哈希/目标有多个结果
如果确实有多个对象具有相同的哈希/目标,则应稍微更改数组到对象的转换
var assocArray = {};
for(var i = 0; i < data.length; i++)
{
// doesn't exist? create array
if (!assocArray[data[i].target])
{
assocArray[data[i].target] = [];
}
// push an element
assocArray[data[i].target].push(data[i]);
}
var-assocArray={};
对于(变量i=0;i
这将生成一个关联数组(Javascript对象)它一致地返回一个包含一个或多个对象的元素数组。这使得以后的操作更容易,因为在任何一种情况下都会返回一个数组。但是很容易改变的是,在单个结果上,它应该只返回一个对象,而不是一个包含单个元素的数组。resultArray=new array()展开:for(var i=0;i@Atheist要扩展吗?你想要解释吗?@d'alar'cop:不,他只是添加了一行你错过的代码,使你的代码示例更完整。哦,我明白了。谢谢你。编辑。谢谢,有这么多答案可供选择!这确实是一个很好的观点。显然,原生for循环比jquery更快…我决定切换到原生for循环…你怎么办你觉得呢?
var getDataByTarget = function (target) {
var ret = false;
$.each(data, function () {
if (this.target == target) {
ret = this;
return false;
}
});
return ret;
};
var assocArray = {};
for(var i = 0; i < data.length; i++)
{
assocArray[data[i].target] = data[i];
}
assocArray[name]
assocArray["production"]
var assocArray = {};
for(var i = 0; i < data.length; i++)
{
// doesn't exist? create array
if (!assocArray[data[i].target])
{
assocArray[data[i].target] = [];
}
// push an element
assocArray[data[i].target].push(data[i]);
}