Javascript 使用数组中的第一个和最后一个元素(日期)在角度工厂/服务中创建obj.name

Javascript 使用数组中的第一个和最后一个元素(日期)在角度工厂/服务中创建obj.name,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,我有一个Angular service/factory方法,它以数组的形式将参数传递给它,数组包含对象[[[{},{}],{},{}] 此参数中包含的数据由周数组组成,每天的对象由日期和整数值组成。例如{“2017-01-10”:711} 该方法的功能是将每个星期数组分组到一个对象中,并将其整数值相加。例如{“name”:“第1周”,“总计”:3228} 如何获取每个数组的第一个和最后一个元素,并由此创建名称/标签?因此,输出将如下所示:{“name”:“第1周-2017-01-10至2017-

我有一个Angular service/factory方法,它以数组的形式将参数传递给它,数组包含对象
[[[{},{}],{},{}]

此参数中包含的数据由周数组组成,每天的对象由日期和整数值组成。例如
{“2017-01-10”:711}

该方法的功能是将每个星期数组分组到一个对象中,并将其整数值相加。例如
{“name”:“第1周”,“总计”:3228}

如何获取每个数组的第一个和最后一个元素,并由此创建名称/标签?因此,输出将如下所示:
{“name”:“第1周-2017-01-10至2017-01-15”,“总计”:3228}

下面是传递给方法的数据示例:

[
   [
      {
         "2016-11-01": 319
      },
      {
         "2016-11-02": 782
      },
      {
         "2016-11-03": 579
      },
      {
         "2016-11-04": 642
      },
      {
         "2016-11-05": 444
      },
      {
         "2016-11-06": 274
      }
   ],
   [
      {
         "2016-11-07": 319
      },
      {
         "2016-11-08": 782
      },
      {
         "2016-11-09": 579
      },
      {
         "2016-11-10": 642
      },
      {
         "2016-11-11": 444
      },
      {
         "2016-11-12": 274
      },
      {
         "2016-11-13": 481
      }
   ]
]
function assignWeekNamesAndTotals(arrayOfWeeks) {

    var data = arrayOfWeeks;

    var result = data.reduce(function (p, c, i) {

        var total = c.reduce(function (total, obj) {
            for (var k in obj) {
                total += obj[k]; // calculate total
            }
            return total;
        }, 0);

        // Format object in any format you want
        var tmp = {};
        tmp.name = "Week " + (i + 1)
        tmp.total = total;

        p.push(tmp)
        return p;
    }, [])

    console.log("Assign Week names and Totals Output (Step 2: " + JSON.stringify(result, null, "   "));
    return result;   
}
[
   {
      "name": "Week: from 2017-01-10 to 2017-01-15",
      "total": 3228
   },
   {
      "name": "Week: from 2017-01-16 to 2017-01-16",
      "total": 363
   }
]
方法如下:

[
   [
      {
         "2016-11-01": 319
      },
      {
         "2016-11-02": 782
      },
      {
         "2016-11-03": 579
      },
      {
         "2016-11-04": 642
      },
      {
         "2016-11-05": 444
      },
      {
         "2016-11-06": 274
      }
   ],
   [
      {
         "2016-11-07": 319
      },
      {
         "2016-11-08": 782
      },
      {
         "2016-11-09": 579
      },
      {
         "2016-11-10": 642
      },
      {
         "2016-11-11": 444
      },
      {
         "2016-11-12": 274
      },
      {
         "2016-11-13": 481
      }
   ]
]
function assignWeekNamesAndTotals(arrayOfWeeks) {

    var data = arrayOfWeeks;

    var result = data.reduce(function (p, c, i) {

        var total = c.reduce(function (total, obj) {
            for (var k in obj) {
                total += obj[k]; // calculate total
            }
            return total;
        }, 0);

        // Format object in any format you want
        var tmp = {};
        tmp.name = "Week " + (i + 1)
        tmp.total = total;

        p.push(tmp)
        return p;
    }, [])

    console.log("Assign Week names and Totals Output (Step 2: " + JSON.stringify(result, null, "   "));
    return result;   
}
[
   {
      "name": "Week: from 2017-01-10 to 2017-01-15",
      "total": 3228
   },
   {
      "name": "Week: from 2017-01-16 to 2017-01-16",
      "total": 363
   }
]

我感谢你的指导

我可以通过以下操作创建解决方案:

[
   [
      {
         "2016-11-01": 319
      },
      {
         "2016-11-02": 782
      },
      {
         "2016-11-03": 579
      },
      {
         "2016-11-04": 642
      },
      {
         "2016-11-05": 444
      },
      {
         "2016-11-06": 274
      }
   ],
   [
      {
         "2016-11-07": 319
      },
      {
         "2016-11-08": 782
      },
      {
         "2016-11-09": 579
      },
      {
         "2016-11-10": 642
      },
      {
         "2016-11-11": 444
      },
      {
         "2016-11-12": 274
      },
      {
         "2016-11-13": 481
      }
   ]
]
function assignWeekNamesAndTotals(arrayOfWeeks) {

    var data = arrayOfWeeks;

    var result = data.reduce(function (p, c, i) {

        var total = c.reduce(function (total, obj) {
            for (var k in obj) {
                total += obj[k]; // calculate total
            }
            return total;
        }, 0);

        // Format object in any format you want
        var tmp = {};
        tmp.name = "Week " + (i + 1)
        tmp.total = total;

        p.push(tmp)
        return p;
    }, [])

    console.log("Assign Week names and Totals Output (Step 2: " + JSON.stringify(result, null, "   "));
    return result;   
}
[
   {
      "name": "Week: from 2017-01-10 to 2017-01-15",
      "total": 3228
   },
   {
      "name": "Week: from 2017-01-16 to 2017-01-16",
      "total": 363
   }
]
我在我的方法中创建了一个创建日期数组的方法。然后,我简单地使用数组中的第一个和最后一个元素作为周期

function assignWeekNamesAndTotals(arrayOfWeeks) {

    var data = arrayOfWeeks;

    var result = data.reduce(function (p, c, i) {

        var dateArray = [];

        var createDateArray = c.forEach(function (obj) {

            var dateFromObj = Object.keys(obj)[0];

            dateArray.push(dateFromObj);

            return dateArray;
        });

        var total = c.reduce(function (total, obj) {

            for (var k in obj) {
                total += obj[k]; // calculate total
            }
            return total;
        }, 0);

        // Format object in any format you want
        var tmp = {};
        var first = dateArray[0];
        var last = dateArray[dateArray.length - 1]
        tmp.name = "Week: from " + first + " to " + last;
        tmp.total = total;

        p.push(tmp)
        return p;
    }, [])
    console.log("Assign Week names and Totals Output (Step 2: " + JSON.stringify(result, null, "   "));
    return result;
}
输出如下:

[
   [
      {
         "2016-11-01": 319
      },
      {
         "2016-11-02": 782
      },
      {
         "2016-11-03": 579
      },
      {
         "2016-11-04": 642
      },
      {
         "2016-11-05": 444
      },
      {
         "2016-11-06": 274
      }
   ],
   [
      {
         "2016-11-07": 319
      },
      {
         "2016-11-08": 782
      },
      {
         "2016-11-09": 579
      },
      {
         "2016-11-10": 642
      },
      {
         "2016-11-11": 444
      },
      {
         "2016-11-12": 274
      },
      {
         "2016-11-13": 481
      }
   ]
]
function assignWeekNamesAndTotals(arrayOfWeeks) {

    var data = arrayOfWeeks;

    var result = data.reduce(function (p, c, i) {

        var total = c.reduce(function (total, obj) {
            for (var k in obj) {
                total += obj[k]; // calculate total
            }
            return total;
        }, 0);

        // Format object in any format you want
        var tmp = {};
        tmp.name = "Week " + (i + 1)
        tmp.total = total;

        p.push(tmp)
        return p;
    }, [])

    console.log("Assign Week names and Totals Output (Step 2: " + JSON.stringify(result, null, "   "));
    return result;   
}
[
   {
      "name": "Week: from 2017-01-10 to 2017-01-15",
      "total": 3228
   },
   {
      "name": "Week: from 2017-01-16 to 2017-01-16",
      "total": 363
   }
]