在布尔掩码上分散数组值的优雅方法

时间:2018-09-03 10:49:45

标签: javascript

说我有一个从这个日期间隔[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;
})

2 个答案:

答案 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; }