从JSON数组键值对动态检索键 - Javascript

Que*_*yer 11 javascript json d3.js

我有一个想要寻求你的专业知识的问题.

这是我拥有的JSON数组:

[{"A":20,"B":32,"C":27,"D":30,"E":40}]
Run Code Online (Sandbox Code Playgroud)

我想要做的是从JSON数组中检索键(A,B,C,D,E)而不是值.我能够检索值而不是键.

我正在使用它来动态检索值:

function calculateSum(jsonArray) {
    var result = 0;
    for (var i = jsonArray.length - 1;  i >= 0; --i)
    {
        var o = jsonArray[i];
        A = o.A;
        B = o.B;
        C = o.C;
        D = o.D;
        E = o.E;
        result = A + B + C + D + E;
        return result;
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

同样,我该怎么做才能使用JavaScript 检索密钥

nra*_*itz 17

您是否正在使用D3.js标签?因为在这种情况下,你可以使用d3.keys():

var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
d3.keys(data[0]); // ["A", "B", "C", "D", "E"] 
Run Code Online (Sandbox Code Playgroud)

如果你想要所有值的总和,你可能最好使用d3.values()d3.sum():

var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}, {"F":50}];
// get total of all object totals
var total = d3.sum(data, function(d) {
    // get total of a single object's values
    return d3.sum(d3.values(d));
});
total; // 199
Run Code Online (Sandbox Code Playgroud)


Sah*_*hoo 11

所有当前发布的解决方案都存在问题.object.hasOwnProperty(prop)当使用for ... in循环迭代对象时,它们都没有检查.如果将属性添加到原型中,这可能会导致出现幻像键.

引用道格拉斯·克罗克福德

请注意,添加到对象原型的成员将包含在枚举中.使用hasOwnProperty方法来区分对象的真实成员是明智的.

添加一个检查hasOwnProperty 到maerics的优秀解决方案.

var getKeys = function (arr) {
        var key, keys = [];
        for (i = 0; i < arr.length; i++) {
            for (key in arr[i]) {
                if (arr[i].hasOwnProperty(key)) {
                    keys.push(key);
                }
            }
        }
        return keys;
    };
Run Code Online (Sandbox Code Playgroud)