Javascript 尝试返回givenName的所有键值

Javascript 尝试返回givenName的所有键值,javascript,arrays,Javascript,Arrays,试图返回givenName的所有键值,但没有得到任何结果。 我是新来的这是 window.location.href = 'gonative://contacts/getAll?callback=contacts_callback'; function contacts_callback(data) { var obj = JSON.stringify(data); var obj = JSON.parse(obj); var givenName = obj.conta

试图返回givenName的所有键值,但没有得到任何结果。 我是新来的这是

window.location.href = 'gonative://contacts/getAll?callback=contacts_callback';

function contacts_callback(data) {
    var obj = JSON.stringify(data);
    var obj = JSON.parse(obj);
    var givenName = obj.contacts[0].givenName;

    var keys = Object.keys(obj.contacts.givenName);

    document.getElementById("demo").innerHTML = keys;

} 

假设
obj.contacts
是一个对象数组,每个对象都有一个
givenName
属性

由于
obj.contacts
是一个数组,因此它本身不太可能有
givenName
属性(它可以,但是你不能通过JSON获得)

var keys = Object.keys(undefined);
此时,浏览器开发人员工具控制台中应该会出现错误

您需要使用
Array#map
函数,如下所示

function contacts_callback(obj) {
    var givenNames = obj.contacts.map(({givenName}) => givenName);
    document.getElementById("demo").innerHTML = givenNames;
} 

除了两次声明同一个变量(obj)的明显错误(但不影响javascript),代码与:

function contacts_callback(obj) {
注意:但是,如果函数中的代码要改变
obj
中的任何值,那么如果您不想更改传入的对象,则应使用原始代码


data
看起来怎么样?代码从未执行过,您正在重定向到新页面。这是一个非常大的数据,因为这是从您手机的通讯簿访问的。如果
obj.contacts
是一个数组,那么您做得不对。是的,这是一个数组array@DigiNetEvents-注意:请为deb使用浏览器开发人员工具控制台ugging,你可能会看到一个错误调用stringify and parse是一种制作对象深度副本的方法。但是在这个函数中没有必要这样做。@Barmar-我知道,但在这种情况下没有必要-如果传入的对象发生了变异,情况会有所不同-我已经用这一点更新了答案
function contacts_callback(data) {
    var obj = JSON.stringify(data);
    var obj = JSON.parse(obj);
function contacts_callback(obj) {