gpt4 book ai didi

javascript - Javascript 中的 bool 数组掩码

转载 作者:行者123 更新时间:2023-11-29 10:04:51 25 4
gpt4 key购买 nike

来自 Python 和 Numpy,我发现自己经常使用的一个典型特征是 bool 掩码。

这是 Python 中的示例:

>>> mylist = np.array([50, 12, 100, -5, 73])
>>> mylist == 12
array([False, True, False, False, False]) # A new array that is the result of ..
# .. comparing each element to 12
>>> mylist > 0
array([True, True, True, False, True]) # A new array that is the result of ..
# .. comparing each element to 0
>>> mylist[mylist == 12]
array([12]) # A new array of all values at indexes ..
# .. where the result of `mylist == 12` is True

>>> mask = mylist != 100 # Save a mask
>>> map(foo, mylist[mask]) # Apply `foo` where the mask is truthy

通常,当 np.array 被另一个相同大小的数组索引时,将返回一个新数组,其中包含掩码数组值为真值的那些索引处的元素。

我可以用 Javascript 中的 Array.prototype.mapArray.prototype.filter 做一些类似的事情,但它更冗长并且我的面具被破坏了。

-> mylist = [50, 12, 100, -5, 73]
-> mylist.map(item => item == 12)
<- [false, true, false, false, false] // mylist == 12

-> mylist.filter(item => item == 12)
<- [12] // mylist[mylist == 12]

-> mask = mylist.map(item => item == 12)
-> mylist.filter(item => mask.unshift())
<- [12] // mylist[mask]

-> mask
<- [] // Mask isn't reusable

是否有更好的方法在 javascript 中对数组应用掩码,或者我每次都复制掩码并使用 filtermap

最佳答案

filtermap 都会创建新数组,所以它们没问题。但是,您使用 unshift 似乎是因为您想要索引而不是值。您可以在调用中传递索引:

var mylist = [50, 12, 100, -5, 73];
var mask = mylist.map(item => item == 12);
var newlist = mylist.filter((item, i) => mask[i]);

console.log(newlist);

或者如果您不想传递一个以上的值,您可以编写自己的 Array.prototype 的 maskFilter 方法,它只接受一个掩码:

Array.prototype.maskFilter = function(mask) {
return this.filter((item, i) => mask[i]);
}

var mylist = [50, 12, 100, -5, 73];
var mask = mylist.map(item => item == 12);
var newlist = mylist.maskFilter(mask);


console.log(newlist); // [12]
console.log(mylist); // untouched

关于javascript - Javascript 中的 bool 数组掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45605315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com