2016-11-17 79 views
2

我有一个多维物体看起来像这样:多维对象评估键值

{ 
"links": [{"source":"58","target":"john","total":"95"}, 
      {"source":"60","target":"mark","total":"80"}], 
"nodes": 
      [{"name":"john"}, {"name":"mark"}, {"name":"rose"}] 
} 

我想在评估“总”价值“的链接。”我可以在一维数组做到这一点,是这样的:

for (var i = 0; i < data.length; i++) { 
    for (var key in data[i]) { 
     if (!isNaN(data[i][key])) { 
      data[i][key] = +data[i][key]; 
     } 
    } 
}; 

但我一直无法通过名称找出如何在两方面(尤其是呼叫的键“总”的值做到这一点)。

有人能让我走上正轨吗?谢谢!

+0

做上述工作的此代码为您的一维数组?你怎么只增加'总'数字而不是任何只是一个数字? –

+0

在我的单暗阵列中,我检查每个键是否看起来像一个数字,如果它确实如此,它将转换为数字。数据项在d3.js中转换之前的“+”。我真的只是想学习如何使用我在上面输入的类似循环逻辑,在我的多暗数组中使用名为“total”的键。 – Phoebe

+0

你有两个一维数组。执行与正常数组相同的操作,只需在'data.links'和'data.nodes'处执行。 –

回答

2

从原理出发,你的阵列的结构是这样得到总,你可以迭代键和值:

var obj = { 
 
"links": [{"source":"58","target":"john","total":"95"}, 
 
      {"source":"60","target":"mark","total":"80"}], 
 
"nodes": 
 
      [{"name":"john"}, {"name":"mark"}, {"name":"rose"}] 
 
}; 
 

 
for (var key in obj){ 
 
    obj[key].forEach(function(item){ 
 
    for(var subkey in item){ 
 
     if (subkey == 'total') 
 
     console.log(item[subkey]); 
 
    }; 
 
    }); 
 
};

+0

是的!非常感谢,这是一个很大的帮助! – Phoebe

+0

很高兴帮助,欢迎您:) –

0

可以使用减少

检查这个片段

var obj = { 
 
    "links": [{ 
 
    "source": "58", 
 
    "target": "john", 
 
    "total": "95" 
 
    }, { 
 
    "source": "60", 
 
    "target": "mark", 
 
    "total": "80" 
 
    }, { 
 
    "source": "60", 
 
    "target": "mark", 
 
    "total": "80" 
 
    }], 
 
    "nodes": [{ 
 
    "name": "john" 
 
    }, { 
 
    "name": "mark" 
 
    }, { 
 
    "name": "rose" 
 
    }] 
 
} 
 

 
var links = obj.links; 
 
var sum = links.map(el => el.total).reduce(function(prev, curr) { 
 
    return parseInt(prev, 10) + parseInt(curr, 10); 
 

 
}); 
 
console.log(sum);

希望它可以帮助

0

从阵列中提取值,并将其转换为数字,并把它们加起来。

Array.prototype.map()Array.prototype.reduce()是相当有帮助的位置:

var data = {"links":[{"source":"58","target":"john","total":"95"},{"source":"60","target":"mark","total":"80"}], "nodes":[{"name":"john"}, {"name":"mark"}, {"name":"rose"}]}; 
 

 
var sum = data.links.map(function(link) { 
 
    return +link.total; 
 
}).reduce(function(a, b) { 
 
    return a + b; 
 
}); 
 

 
console.log(sum);