如何使用forEach遍历序列中的数组

时间:2018-10-12 19:54:51

标签: javascript arrays sequence marklogic marklogic-9

我正在使用xdmp.eval函数搜索并返回最终数据库中的文档,以便在协调过程中使用。

let finalDoc = xdmp.eval(
"fn.head(cts.search(cts.jsonPropertyValueQuery('Id',id, 
['exact']),['unfiltered','score-zero']))",
     {'id':id},
     {"database" : xdmp.database("data-hub-FINAL")});

文档以以下结构的顺序返回:

{"SourceSystemName":"",
  "BatchDtTm":"06/20/2018 15:05:15",
  "SubjectArea":"Customer",
  "DocumentType":"Registration",
   "Id":"100", 
     "Contact":[
       {"CustomerId":"1",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       },
       {"CustomerId":"2",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       }            
     ]
}

我需要使用 finalDoc.Contact.forEach()遍历 Contact 数组中的每个客户。但是,当我使用fn.head(finalDoc.toArray())或fn.head(finalDoc.toObject())将finalDoc序列更改为数组时,我的forEach函数失败,错误为“无法读取属性' forEach'undefined” 。当我只是简单地尝试通过执行finalDoc.Contact(或finalDoc [0] .Contact)来输出联系人数组时,就会得到“ Null”输出。

如何从序列中抓取Contact数组并使用forEach遍历它?谢谢!

2 个答案:

答案 0 :(得分:3)

您拥有正确的零件,只是顺序错误。 fn.head不使用数组,因此在fn.head(finalDoc.toArray())中不起作用:您仍然拥有数组。您可以将序列转换为数组,然后使用数组索引:

finalDoc.toArray()[0].Contact.forEach(...)

或者您可以在最初评估的序列上使用fn.head

fn.head(finalDoc).Contact.forEach(...)

答案 1 :(得分:-1)

var myobj = {"SourceSystemName":"",
  "BatchDtTm":"06/20/2018 15:05:15",
  "SubjectArea":"Customer",
  "DocumentType":"Registration",
   "Id":"100", 
     "Contact":[
       {"CustomerId":"1",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       },
       {"CustomerId":"2",
        "FirstName":"",
        "LastName":"",
        "EmailId":""
       }            
     ]
}

myobj["Contact"].forEach(function(item){
console.log(item);
})

我认为如果已经是对象,则不需要调用toArray()。

相关问题