Рассчитать сумму из JSON подобъекта - PullRequest
0 голосов
/ 10 января 2020

Я начинаю с VueJs и у меня проблема. Я пытаюсь сделать сумму из JSON подобъекта, но она не работает. У меня есть глобальный объект ( Данные ), конечный субобъект ( achat ). Я хотел бы рассчитать сумму для значений, принадлежащих ключу initial . Я пытаюсь несколькими способами, это не работает. Я не говорю по-английски sh. Спасибо за ваше понимание.

Я хочу получить в результате: пример

{
    "data": [

        {
            "id": 1,
            "achat": [
                {
                    "fournisseur": "aze",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 2,
            "achat": [
                {
                    "fournisseur": "paul",
                    "initial": "123",
                    "supp": "100"
                }
            ]
        },
        {
            "id": 3,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 4,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "0",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 5,
            "achat": [
                {
                    "fournisseur": "LOUBATA",
                    "initial": "12345098",
                    "supp": "123400"
                }
            ]
        },
        {
            "id": 6,
            "achat": [
                {
                    "fournisseur": "Douze Pixels",
                    "initial": "10000000",
                    "supp": "300000"
                }
            ]
        },
        {
            "id": 7,
            "achat": [
                {
                    "fournisseur": "azer",
                    "initial": "1234",
                    "supp": "0"
                }
            ]
        } 
      ]
   }



total_depenses: function () {

         
    let total = [];
     Object.entries (this.data) .forEach (([key, val]) => {
     total.push (val.initial)
      });
     return total.reduce (function (total, num) {return total + num});
      
    }

Ответы [ 4 ]

1 голос
/ 10 января 2020
  const sum = info.data.map(x => x.achat) // Extract only the achat field
                    .flat() // Flatten the array Eg: [[1], [2], [3]] --> [1, 2, 3]
                    .map(x => +x.initial) // Extract the initial field ("+" is to convert string to integer)
                    .reduce((e, f) => e + f); // Calculate the sum 

let info = {
    "data": [

        {
            "id": 1,
            "achat": [
                {
                    "fournisseur": "aze",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 2,
            "achat": [
                {
                    "fournisseur": "paul",
                    "initial": "123",
                    "supp": "100"
                }
            ]
        },
        {
            "id": 3,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 4,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "0",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 5,
            "achat": [
                {
                    "fournisseur": "LOUBATA",
                    "initial": "12345098",
                    "supp": "123400"
                }
            ]
        },
        {
            "id": 6,
            "achat": [
                {
                    "fournisseur": "Douze Pixels",
                    "initial": "10000000",
                    "supp": "300000"
                }
            ]
        },
        {
            "id": 7,
            "achat": [
                {
                    "fournisseur": "azer",
                    "initial": "1234",
                    "supp": "0"
                }
            ]
        } 
      ]
    };
        
  const sum = info.data.map(x => x.achat) // Extract only the achat object
                    .flat() // Flatten the array Eg: [[1], [2], [3]] --> [1, 2, 3]
                    .map(x => +x.initial) // Extract the initial field ("+" is to convert string to integer)
                    .reduce((e, f) => e + f); // Calculate the sum
                    
  console.log("sum: " + sum);
1 голос
/ 10 января 2020

Вот один из способов сделать это. Вы можете отфильтровать все массивы achat и затем объединить их. После этого вы можете go пройти через все элементы и сделать сумму.

const dataObject = {
    "data": [

        {
            "id": 1,
            "achat": [
                {
                    "fournisseur": "aze",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 2,
            "achat": [
                {
                    "fournisseur": "paul",
                    "initial": "123",
                    "supp": "100"
                }
            ]
        },
        {
            "id": 3,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "12",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 4,
            "achat": [
                {
                    "fournisseur": "Kian Crist",
                    "initial": "0",
                    "supp": "0"
                }
            ]
        },
        {
            "id": 5,
            "achat": [
                {
                    "fournisseur": "LOUBATA",
                    "initial": "12345098",
                    "supp": "123400"
                }
            ]
        },
        {
            "id": 6,
            "achat": [
                {
                    "fournisseur": "Douze Pixels",
                    "initial": "10000000",
                    "supp": "300000"
                }
            ]
        },
        {
            "id": 7,
            "achat": [
                {
                    "fournisseur": "azer",
                    "initial": "1234",
                    "supp": "0"
                }
            ]
        }
    ]
}


const returnSum = data => {
    return [].concat.apply([], 
            data.map(el => el.achat))
            .reduce((acc,el) => acc + +el.initial, 0)
}

console.log(returnSum(dataObject.data))
0 голосов
/ 13 января 2020

Вы также можете сделать это так:

const sum = dataObject.data
.map(x => parseInt(x.achat[0].initial))
.reduce((y, z) => y + z)

console.log(sum)
0 голосов
/ 10 января 2020

Спасибо всем, вы экономите мое время ......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...