Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中搜索关联数组/哈希_Javascript_Jquery - Fatal编程技术网

在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]);
}