我的数据数组如下:
totalDays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"],
saleDays = ["tue", "thu"],
sale = [314,240].
我需要以这样的方式修改“销售”数组,即销售数组应与具有相应销售天数的totalDays数组进行比较,如果当天存在销售,则包括销售数组金额,否则在销售数组中包括0。
对于上面的示例,我需要销售数组输出,如下所示:
sale = [0,314,0,240,0,0,0].
代码:
var arr = _.zip(saleDays, sale);
var newSale = [];
var saleAmt = 0;
_.forEach(arr, function(element) {
saleAmt = totalDays.indexOf(element[0]) > -1 ? element[1] : 0;
newSale.push(saleAmt);
});
但问题是在这种情况下,indexOf条件总是返回true,所以我尝试使用嵌套循环,例如:
_.forEach(totalDays, function(dt) {
_.forEach(arr, function(element) {
saleAmt = dt === element[0] ? element[1] : 0;
newSale.push(saleAmt);
});
});
但在本例中,循环运行了“m * n”次。其中 m 是“totalDays”的长度,“n”是“arr”的长度。我想避免这种情况,循环应该运行totalDays.length次并产生结果。请帮助我实现愿望的输出。
根据@Tao P. R.的建议,我正在尝试将同样的事情用于具有周开始日期的月份销售数组。
例如:
totalSale = ['Wed Jun 10 2015','Tue Jun 16 2015','Mon Jun 22 2015','Sun Jun 28 2015','Sat Jul 04 2015','Fri Jul 10 2015']
saleDays: [ 'Mon Jun 15 2015', 'Tue Jul 07 2015' ]
sale: [134,245]
现在我必须检查 TotalSale 的销售是在哪一周完成的。对于上面的例子我需要 销售数据 = [134,0,0,0,245,0] 我已经通过为 TotalSale 创建数组数组来尝试此操作,
var mappedSale = _.map(totalDays, function(d){
for(var j = 0; j < saleDays.length; j ++ ){
var i = d.indexOf(saleDays[j]);
if (i<0){ return 0 }
else return sale[i];
}
});
哪里,
totalDays = [['Wed Jun 10 2015',..'Mon Jun 15 2015'],['Tue Jun 16 2015',..'Sun Jun 21 2015'],...]
请告诉我这有什么问题吗?
最佳答案
您可以使用Array.prototype.map
将totalDays
数组与sale
的相应值进行映射,如下所示:
totalDays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"],
saleDays = ["tue", "thu"],
sale = [314,240];
// Output
var mappedSale = totalDays.map(function(d){
var i = saleDays.indexOf(d);
if (i<0){ return 0 }
else return sale[i];
});
alert(mappedSale); // <-- [0,314,0,240,0,0,0]
与下划线等效的逻辑:
var mappedSale = _.map(totalDays, function(d){
var i = saleDays.indexOf(d);
if (i<0){ return 0 }
else return sale[i];
});
关于javascript - 在javascript中迭代多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312015/