所以我有这个:
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");
我没有得到任何回报。我在这里错过了什么?我需要获取该列表并转换为字符串但我认为它将作为字符串出现,因为我已经解析了该对象?提前致谢
答案 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"
值,将其更改为新字典的键。