访问JavaScript数组中的数据

时间:2012-10-10 18:10:49

标签: javascript arrays

  

可能重复:
  Find object by id in array of javascript objects

所以我有这个:

mapArray=
[{"Title":"crop_rotation","subs":"5,6,7,10"},
{"Title":"cover_crops","subs":"2,5,7,8,9,13,14"},
{"Title":"binary_wetlands","subs":"1,2,3,4,5,6,7,8,9,10,11"}]

我正在尝试根据标题访问subs值。我正在尝试

listofSubs=mapArray["crop_rotation"]("subs");

我没有得到任何回报。我在这里错过了什么?我需要获取该列表并转换为字符串但我认为它将作为字符串出现,因为我已经解析了该对象?提前致谢

4 个答案:

答案 0 :(得分:3)

首先,您必须找到具有特定标题的对象。你必须通过迭代数组并将每个对象的Title与你的值进行比较来做到这一点:

function find(arr, key, value) {
    for(var i = 0, l = arr.length; i < l; i++) {
        if(arr[i][key] === value)) {
            return arr[i];
        }
    }
    // return {}; // if you would want it null-safe
}

然后您可以访问相应的subs属性:

var obj = find(mapArray, 'Title', 'crop_rotation');
if(obj) {
    var listofSubs = obj.subs;
}

解释您的代码无效的原因:

mapArray["crop_rotation"]("subs");
//      |-      1      -|-   2  -|
  • |1|尝试访问crop_rotation中对象的属性mapArray。数组没有这样的属性,在你的情况下没有对象。 crop_rotation是其中一个属性的
  • |2|是函数调用。它尝试调用mapArray["crop_rotation"]引用的函数,并将"subs"作为第一个参数传递。如果mapArray["crop_rotation"]不是函数(如您的情况),则会抛出错误。

更多信息:

答案 1 :(得分:0)

alert(mapArray[0].Title) =“crop_rotation”

答案 2 :(得分:0)

你所拥有的是一系列物体。并且数组被数字索引。所以要获得你想要的价值:

mapArray;    // returns array of objects
mapArray[0]; // returns first object in the array

// returns the value of the `"subs"` key in the first object in the array
mapArray[0]['subs'];

注意这不会按标题找到它,你需要更多的逻辑。请参阅Felix Kling的答案,

答案 3 :(得分:0)

你可以'只按字段的元素访问列表(数组)。它的目的是命名列表(数组) - 除了位置之外没有任何其他索引。所以你可以访问像mapArray [0]这样的列表。如果想通过标题访问它你应该有像这样的结构

{ "crop_rotation": ...,
  "cover_crops" :....,
  .... 
}

如果您的输入已修复且无法更改,则必须对其进行预处理以满足您的需求。因此,您必须遍历数组并使字典从其中更改"Title"值,将其更改为新字典的键。