Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示每个键的百分比_Javascript_Arrays_Object - Fatal编程技术网

Javascript 显示每个键的百分比

Javascript 显示每个键的百分比,javascript,arrays,object,Javascript,Arrays,Object,我想计算对象中每个关键点的百分比。 我已经计算了每家商店的总数(水果+蔬菜)。我想显示每家商店每种水果或蔬菜的百分比,而不是它们的价值 百分比=每个商店的水果或蔬菜/每个商店的水果或蔬菜总数 在这一行中,我想要如下内容: k(v).forEach(k => k.includes('item') && (s[(i = items[v[k]]).group] += (i.score/total)*100)), o), {}); 这是我的代码和数

我想计算对象中每个关键点的百分比。 我已经计算了每家商店的总数(水果+蔬菜)。我想显示每家商店每种水果或蔬菜的百分比,而不是它们的价值

百分比=每个商店的水果或蔬菜/每个商店的水果或蔬菜总数

在这一行中,我想要如下内容:

k(v).forEach(k => k.includes('item') &&
                (s[(i = items[v[k]]).group] += (i.score/total)*100)), o), {});
这是我的代码和数组

  var myArray = [{
                    shop: "shop1",
                    item1: "my apple 1",
                    item2: "my carrot 1"
                },
                {
                    shop: "shop1",
                    item1: "my apple 1",
                    item2: "my carrot 1"
                },
                                                        {
                    shop: "shop2",
                    item1: "my apple 0",
                    item2: "my carrot 0"
                },
                {
                    shop: "shop2",
                    item1: "my apple 0",
                    item2: "my carrot 1"
                }
            ];

            var MyArrayDefinition = [{
                    item: "my apple 0",
                    color: "red",
                    group: "fruit",
                    score: 0
                },
                {
                    item: "my carrot 1",
                    color: "orange",
                    group: "vegetable",
                    score: 1
                },
                {
                    item: "my apple 1",
                    color: "red",
                    group: "fruit",
                    score: 1
                },
                {
                    item: "my carrot 0",
                    color: "orange",
                    group: "vegetable",
                    score: 0
                }
            ];

        var k = Object.keys,
            items = MyArrayDefinition.reduce((o, v) => (o[v.item] = v, o), {});

        var shops = myArray.reduce((o, v, i, s) => (
            s = v[k(v).find(k => k)],
            s = o[s] || (o[s] = {
                fruit: 0,
                vegetable: 0,
                        }),
            k(v).forEach(k => k.includes('item') &&
                (s[(i = items[v[k]]).group] += i.score)), o), {});

        var result = k(shops).map((k, i) => ({
            id: i + 1,
            shop: k,
            itemGroup: shops[k],
            total:Object.values(shops[k]).reduce((a, b) => a + b),
        }));
我想要这个结果

 [ { "id": 1, "shop": "shop1", "fruit": 50, "vegetable": 50 , "total": 4 }, { "id": 2, "shop": "shop2" "fruit": 0, "vegetable": 100 , "total": 1 } ]

您可以获取一张地图,收集所有计数,然后生成所需的百分比值

var数组=[{shop:“shop1”,item1:“我的苹果1”,item2:“我的胡萝卜1”},{shop:“shop1”,item1:“我的苹果1”,item2:“我的胡萝卜0”},{shop:“shop2”,item1:“我的苹果0”,item2:“我的胡萝卜1”},
定义=[{项目:“我的苹果0”,颜色:“红色”,组:“水果”,分数:0},{项目:“我的胡萝卜1”,颜色:“橙色”,组:“蔬菜”,分数:1},{项目:“我的苹果1”,颜色:“红色”,组:“水果”,分数:1},{项目:“我的胡萝卜0”,颜色:“橙色”,组:“蔬菜”,分数:0},
分组=[“水果”、“蔬菜”],
items=Object.assign(…definitions.map({item,group,score})=>({[item]:{group,score})),
结果=Array.from(
array.reduce((map,o)=>{
var shop=map.get(o.shop);
如果(!商店){
shop=Object.assign({itemGroup:{},total:0},…groups.map(k=>({[k]:0}));
地图集(o.shop,shop);
}
Object.entries(o.forEach)([k,item])=>{
如果(k==‘商店’){
返回;
}
shop.total+=项目[项目]。分数;
店铺[项目[项目].组]+=项目[项目].得分;
});
groups.forEach(k=>shop.itemGroup[k]=shop[k]*100/shop.total);
返回图;
},新地图),
([shop,{itemGroup,total}],i)=>(Object.assign({id:i+1,shop,total},itemGroup))
);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
请同时添加想要的结果。计算有效吗?我刚刚显示了我想要的结果。我的计算不起作用。我在其他帖子中问了同样的问题。在这种情况下,你已经解决了我的问题,但最后我不需要多维对象。是否可以删除对象“itemGroup”。我需要为每个对象的钥匙“id”,“商店”,“水果”,“蔬菜”。对不起,因为两天来,我对我的需要感到困惑。我希望我很清楚…实际上我不知道你想要什么。请为新问题添加一个完整的想要的结果,该结果是完整的,并且包含一些粒子来自何处的信息。这是我想要的数组[{“id”:1,“shop1”,“水果”:50,“蔬菜”:50,“总计”:4},{“id”:2,“shop2”,“水果”:0,“蔬菜”:100,“总计”:1}]非常感谢尼娜!!最后,我的数据无法使用:(我的控制台中有一个错误。我将添加一个新问题。感谢您的帮助