说我有一个从这个日期间隔[10/10/2018 - 20/10/2018]
得到的值数组。有些日子会附加一些值,例如温度。别人没有。
值存在的布尔掩码类似于[1,0,0,0,1,0,0,1,0,0]
。
温度测量就像[10, 12, 9]
。
一种基于掩码分散值以获取除空值(-1,null,...)以外的所有日期度量的优雅方法是什么
结果:
[10,-1,-1,-1,12,-1,-1,9,-1,-1]
编辑:为了显示努力。我想到了这个:
missing_mask.map(function(m) {
if (m == 1)
return values.reverse().pop();
else
return 0;
})
答案 0 :(得分:1)
您可以使用Array.forEach()
,因为forEach()
将循环到arry并通过引用更改元素。请注意tempMeasure
数组。它保存温度测量值,以便可以用1
屏蔽这些值。
var arr = [10, -1, -1, -1, 12, -1, -1, 9, -1, -1];
var tempMeasure = [10, 12, 9];
var i=0;
arr.forEach(function(item, index) {
if (tempMeasure.indexOf(item) !== -1) {
arr[index] = tempMeasure[i];
i++;
}
});
console.log(arr);
答案 1 :(得分:1)
您可以映射mask
并采用measures
或-1
递增的索引。
var mask = [1, 0, 0, 0, 1, 0, 0, 1, 0, 0],
measures = [10, 12, 9],
result = mask.map((i => b => b ? measures[i++] : -1)(0));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES5
var mask = [1, 0, 0, 0, 1, 0, 0, 1, 0, 0],
measures = [10, 12, 9],
result = mask.map(function (i) {
return function (b) {
return b
? measures[i++]
: -1;
};
}(0));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
具有变化值的ES5
var mask = [1, 0, 0, 0, 1, 0, 0, 1, 0, 0],
measures = [10, 12, 9],
result = mask.map(function (b) {
return b
? measures.shift()
: -1;
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }