如何使用forEach按顺序迭代数组

3
我正在使用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() 遍历每个客户。然而,当我使用 fn.head(finalDoc.toArray())fn.head(finalDoc.toObject()) 将 finalDoc 序列转换为数组时,我的 forEach 函数会出现错误 "Cannot read property 'forEach' of undefined"。当我尝试通过执行 finalDoc.Contact (或 finalDoc[0].Contact) 简单输出联系人数组时,我会得到一个 "Null" 输出。

如何从序列中获取 Contact 数组并使用 forEach 进行迭代?谢谢!


1
尝试使用以下代码:finalDoc = JSON.parse(JSON.stringify(finalDoc)); - Aagam Jain
将其分配给var arr = yourObj.Contact有什么问题? - Void Spirit
2个回答

3
您有正确的部分,只是顺序错了。fn.head不接受数组,因此在fn.head(finalDoc.toArray())中没有作用:您仍然会得到一个数组。您可以将序列转换为数组,然后使用数组索引:
finalDoc.toArray()[0].Contact.forEach(...)

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

,这样您就可以得到第一个元素。

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

非常感谢,我使用了您的第一个建议,它完美地解决了问题! - Hank

-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()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接