Javascript 基于密钥映射2数组

Javascript 基于密钥映射2数组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个带有一些日期和值的数组。在日期x我们有20份订单,在日期y我们有32份订单 [2016-08-09: 38, 2016-08-08: 75, 2016-08-05: 13, 2016-08-04: 23, 2016-08-03: 10] 第二个数组是一个包含上个月所有日期的数组。例如: ["2016-07-14", "2016-07-15", "2016-07-16", "2016-07-17", "2016-07-18", "2016-07-19", "2016-07-20", "2

我有一个带有一些日期和值的数组。在日期x我们有20份订单,在日期y我们有32份订单

[2016-08-09: 38, 2016-08-08: 75, 2016-08-05: 13, 2016-08-04: 23, 2016-08-03: 10]
第二个数组是一个包含上个月所有日期的数组。例如:

["2016-07-14", "2016-07-15", "2016-07-16", "2016-07-17", "2016-07-18", "2016-07-19", "2016-07-20", "2016-07-21", "2016-07-22", "2016-07-23", "2016-07-24", "2016-07-25", "2016-07-26", "2016-07-27", "2016-07-28", "2016-07-29", "2016-07-30", "2016-07-31", "2016-08-01", "2016-08-02", "2016-08-03", "2016-08-04", "2016-08-05", "2016-08-06", "2016-08-07", "2016-08-08", "2016-08-09", "2016-08-10", "2016-08-11", "2016-08-12", "2016-08-13"]
然后我尝试映射这个数组并检查日期,如果是空的,则写入“”,否则写入在第一个数组中找到的值

        var totalInputOrders = allDates.map(function(date) {
          return [ date, inputOrdersCount[date] ? "" : inputOrdersCount[date] ];
      });

它将给我一个31长度的数组,数组元素有2个值。日期=>值。如果在第一个数组中找不到date,则会写入“”,但他在第一个数组中找不到该值。我在这件事上错在哪里?

首先,根据以下问题,让这项工作如你所期待的那样发挥作用:

我期待着:
[[2016-08-10,”]、[2016-08-09,38]、[2016-08-08,75]、[2016-08-07,”]、[2016-08-06,”]、[2016-08-05,13]
等等

我建议采取以下方法:

//使用对象代替数组来关联
//带有订单计数的日期,并将日期包装为
//引号(否则您的语法[1]无效),连字符
//即使在
//用括号括起来,试图得到结果
//数学表达式的键[2]):
变量inputOrdersCount={
"2016-08-09": 38,
"2016-08-08": 75,
"2016-08-05": 13,
"2016-08-04": 23,
"2016-08-03": 10
},
//此阵列没有更改:
所有日期=[“2016-07-14”,“2016-07-15”,“2016-07-16”,“2016-07-17”,“2016-07-18”,“2016-07-19”,“2016-07-20”,“2016-07-21”,“2016-07-22”,“2016-07-23”,“2016-07-24”,“2016-07-25”,“2016-07-26”,“2016-07-27”,“2016-07-28”,“2016-07-29”,“2016-07-30”,“2016-07-31”,“2016-08-01”,“2016-08-02”,“2016-08-04”,“2016-08-05”,"2016-08-07", "2016-08-08", "2016-08-09", "2016-08-10", "2016-08-11", "2016-08-12", "2016-08-13"],
//使用Array.prototype.map()迭代allDates
//数组:
totalInputOrders=allDates.map(函数(日期){
//第一个参数“date”是对
//上的数组的当前数组元素
//我们正在迭代。
//在这里,我们返回一个带有当前
//数组元素作为第一个数组元素
//和第二个值
//由结果的存在决定的
//从inputOrdersCount对象使用
//当前数组元素作为键;如果
//有一个结果,我们使用这个结果,如果
//没有结果(未定义),则使用
//空字符串:
返回[日期,(inputOrdersCount[日期]?inputOrdersCount[日期]:“”];
});
//记录完整的totalInputOrders数组和过滤后的
//totalInputOrders数组,仅返回那些数组元素
//没有空字符串作为第二个数组元素的:
日志(totalInputOrders,totalInputOrders.filter)(函数(arr){
返回arr[1]!==“”;

}))
首先,要使这项工作如您所期望的那样,基于以下问题:

我期待着:
[[2016-08-10,”]、[2016-08-09,38]、[2016-08-08,75]、[2016-08-07,”]、[2016-08-06,”]、[2016-08-05,13]
等等

我建议采取以下方法:

//使用对象代替数组来关联
//带有订单计数的日期,并将日期包装为
//引号(否则您的语法[1]无效),连字符
//即使在
//用括号括起来,试图得到结果
//数学表达式的键[2]):
变量inputOrdersCount={
"2016-08-09": 38,
"2016-08-08": 75,
"2016-08-05": 13,
"2016-08-04": 23,
"2016-08-03": 10
},
//此阵列没有更改:
所有日期=[“2016-07-14”,“2016-07-15”,“2016-07-16”,“2016-07-17”,“2016-07-18”,“2016-07-19”,“2016-07-20”,“2016-07-21”,“2016-07-22”,“2016-07-23”,“2016-07-24”,“2016-07-25”,“2016-07-26”,“2016-07-27”,“2016-07-28”,“2016-07-29”,“2016-07-30”,“2016-07-31”,“2016-08-01”,“2016-08-04”,“2016-08-05”,“2016-08-06”2016-08-07", "2016-08-08", "2016-08-09", "2016-08-10", "2016-08-11", "2016-08-12", "2016-08-13"],
//使用Array.prototype.map()迭代allDates
//数组:
totalInputOrders=allDates.map(函数(日期){
//第一个参数“date”是对
//上的数组的当前数组元素
//我们正在迭代。
//在这里,我们返回一个带有当前
//数组元素作为第一个数组元素
//和第二个值
//由结果的存在决定的
//从inputOrdersCount对象使用
//当前数组元素作为键;如果
//有一个结果,我们使用这个结果,如果
//没有结果(未定义),则使用
//空字符串:
返回[日期,(inputOrdersCount[日期]?inputOrdersCount[日期]:“”];
});
//记录完整的totalInputOrders数组和过滤后的
//totalInputOrders数组,仅返回那些数组元素
//没有空字符串作为第二个数组元素的:
日志(totalInputOrders,totalInputOrders.filter)(函数(arr){
返回arr[1]!==“”;

}));
如果您需要将字符串数组转换为一个对象,以便能够执行
inputOrdersCount[date]
,您可以这样使用:

var输入顺序计数=[“2016-08-09:38”、“2016-08-08:75”、“2016-08-05:13”、“2016-08-04:23”、“2016-08-03:10”];
inputOrdersCount=inputOrdersCount.reduce(函数(计数器,项){
var split=项目分割(/:?/);
计数器[split[0]]=parseInt(split[1],10);
返回计数器;
}, {});

console.log(inputOrdersCount);
如果您需要将字符串数组转换为一个对象才能执行
inputOrdersCount[date]
,您可以这样使用:

var输入顺序计数=[“2016-08-09:38”、“2016-08-08:75”、“2016-08-05:13”、“2016-08-04:23”、“2016-08-03:10”];
inputOrdersCount=inputOrdersCount.reduce(函数(计数器,项){
var split=项目分割(/:?/);
柜台