如何将属性插入嵌套数组的叶节点?

时间:2018-10-08 05:51:06

标签: javascript arrays

这是我的数据:https://api.myjson.com/bins/pmzf0

我使用此函数检索该数据的所有叶节点:

function getLeafNodes(nodes, result = []) {
    for (var i = 0, length = nodes.length; i < length; i++) {
        if (!nodes[i].children) {
            result.push(nodes[i]);
        } else {
            result = getLeafNodes(nodes[i].children, result);
        }
    }
    return result;
 }

这是返回的结果:https://api.myjson.com/bins/12qiq4

然后,我通过获取每个元素的最大值,然后将其乘以1.2得到我的目标值,从而计算出每个元素的百分比信息。

var maxVal = Math.max.apply(Math, leafs.map(function (o) { return o.value; }))

var targetVal = maxVal * 1.2;

然后我使用以下代码获取每个元素的百分比数组:

var percentageData = leafs.map(function (o) {
    return { percentage: (o.value / targetVal * 100).toFixed(2) };
})

这将返回百分比数据数组:https://api.myjson.com/bins/mnte4

现在如何将其重新插入原始数据? 还是我的方法是错误的,我可以立即计算原始数据中每个元素的百分比信息,而无需执行所有这些步骤。

1 个答案:

答案 0 :(得分:0)

与其将百分比值保存在单独的数组中,例如,

var percentageData = leafs.map(function (o) {
    return { percentage: (o.value / targetVal * 100).toFixed(2) };
})

您可以使用foreach之类的方法向叶子添加新的百分比字段,

leafs.forEach(function (o) {
   o['percentage'] = (o.value / targetVal * 100).toFixed(2);
})