Javascript 从嵌套JSON数组获取数据

Javascript 从嵌套JSON数组获取数据,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个这样的物体 var oInfoModal = "{"modals":[{"myID":17,"warningIdx":[0]},{"myID":12,"warningIdx":[1,2]},{"myID":11,"warningIdx":[3]},{"myID":10,"warningIdx":[4]},{"myID":9,"warningIdx":[5,6,7]},{"myID":8,"warningIdx":[8]},{"myID":7,"warningIdx":[9,10]},{"

我有一个这样的物体

var oInfoModal = "{"modals":[{"myID":17,"warningIdx":[0]},{"myID":12,"warningIdx":[1,2]},{"myID":11,"warningIdx":[3]},{"myID":10,"warningIdx":[4]},{"myID":9,"warningIdx":[5,6,7]},{"myID":8,"warningIdx":[8]},{"myID":7,"warningIdx":[9,10]},{"myID":6,"warningIdx":[11,12]},{"myID":5,"warningIdx":[13,14]},{"myID":4,"warningIdx":[15,16]},{"myID":3,"warningIdx":[17]},{"myID":1,"warningIdx":[18,19]},{"myID":0,"warningIdx":[20,21]}]}";
我想根据传递给函数的warnIdx值过滤对象,但结果是得到空对象。我知道问题在于oInfoModal.modals.warningIdx本身就是一个数组。但我不确定如何返回过滤后的oInfoModal.modals对象

function filterInfoModals(warnIdx) {
  return oInfoModal.modals.filter(function (item) {
    return item.warningIdx == warnIdx;
  });
}
我也试过了

function filterInfoModals(warnIdx) {
    return oInfoModal.modals.filter(function (item) {
        return item.warningIdx.filter(function (idx,val) {
            return val.warningIdx == warnIdx;
        });
    });
}
这给了我原始的,未过滤的对象


现在只是兜圈子。任何指导都将不胜感激

您没有有效的对象。您将其包装在“”引号中,因此它是一个字符串。因此,您的过滤器无法正常工作。对象中还存在其他语法错误,这些错误将阻止它正常工作。以下是完整的修复程序:

var oInfoModal = {
  "modals": [
    { "myID": 17, "warningIdx": [0] },
    { "myID": 12, "warningIdx": [1, 2] },
    { "myID": 11, "warningIdx": [3] },
    { "myID": 10, "warningIdx": [4] },
    { "myID": 9, "warningIdx": [5, 6, 7] },
    { "myID": 8, "warningIdx": [8] },
    { "myID": 7, "warningIdx": [9, 10] },
    { "myID": 6, "warningIdx": [11, 12] },
    { "myID": 5, "warningIdx": [13, 14] },
    { "myID": 4, "warningIdx": [15, 16] },
    { "myID": 3, "warningIdx": [17] },
    { "myID": 1, "warningIdx": [18, 19] },
    { "myID": 0, "warningIdx": [20, 21] }
  ]
};

function filterInfoModals(warnIdx) {
  return oInfoModal.modals.filter(function (item) {
    return item.warningIdx.indexOf(warnIdx) > -1;
  });
}
console.log(filterInfoModals(1,2));

对于第一个示例,您是否尝试过
返回item.warningIdx.indexOf(warnIdx)>-1
?这就成功了。函数filterInfoModals(warnIdx){return oInfoModal.modals.filter(function(item){return item.warningIdx.indexOf(warnIdx)>-1;};}另外,您是否在代码中将该oInfoModal设置为该“字符串”?如果您使用双引号指示字段和值,则需要将其包装在单引号中。。。如果oInfoModal是一个字符串,则需要将其JSON.parse()解析为一个实际的对象。它实际上是由我的代码自动生成的。我没有把它复制好。谢谢你的帮助。@ChrisG。最终解决方案见上文。