0

可能重复:
在 javascript 对象数组中按 id 查找对象

所以我有这个:

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

4 回答 4

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"]

更多的信息:

于 2012-10-10T18:14:40.937 回答
0

alert(mapArray[0].Title)=“作物旋转”

于 2012-10-10T18:15:07.487 回答
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 的回答,

于 2012-10-10T18:15:08.963 回答
0

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

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

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

于 2012-10-10T18:18:34.553 回答