true, "1.5" => -6ren">
gpt4 book ai didi

javascript - new Map() State 获取特定键

转载 作者:行者123 更新时间:2023-12-04 15:11:44 27 4
gpt4 key购买 nike

我有一个状态checkedItems:new Map();

当我尝试 console.log(checkedItem) 时,我得到了这个:

Map(3) {"1" => true, "1.5" => true, "2" => false}

我怎样才能在一个数组中只得到真正的那个。

最佳答案

map 有 entries()返回 an iterator 的方法在键值对上。迭代器是惰性的,所以你必须使用它来转换它。一种方法是变成一个数组,然后使用 Array#filterArray#map获取 key :

Array.from(checkedItems.entries())
.filter(([key, value]) => value)
.map(([key]) => key)

但是,有一种更好的方法可以使用 generators 来懒惰地执行此操作:

function* filter(predicate, it) {
for (const item of it) {
if (predicate(item))
yield item;
}
}

function* map(fn, it) {
for (const item of it) {
yield fn(item);
}
}


const checkedItems = new Map()
.set("1" , true)
.set("1.5", true)
.set("2" , false);

const iterator = checkedItems.entries();
const onlyTrue = filter(([key, value]) => value, iterator);
const onlyTrueKeys = map(([key]) => key, onlyTrue);

console.log(Array.from(onlyTrueKeys));

这只会在最后生成一个数组。

filtermap 生成器函数可以组合在一起

const onlyTrueKeys = map(
([key]) => key,
filter(
([key, value]) => value,
checkedItems.entries()
)
);

但是部分应用然后使用辅助函数组合它们可能更容易:

function* filter(predicate, it) {
for (const item of it) {
if (predicate(item))
yield item;
}
}

function* map(fn, it) {
for (const item of it) {
yield fn(item);
}
}

function transform(iterator, ...transformers) {
return transformers.reduce((it, transform) => transform(it), iterator);
}


const checkedItems = new Map()
.set("1" , true)
.set("1.5", true)
.set("2" , false);

const onlyTrueKeys = transform(
checkedItems.entries(),

filter.bind(null, ([key, value]) => value),
map.bind(null, ([key]) => key),
Array.from
);

console.log(onlyTrueKeys);

如果你愿意,这也可以变成一个类:

function* filter(it, pred) {
for (const item of it) {
if (pred(item))
yield item;
}
}

function* map(it, fn) {
for (const item of it) {
yield fn(item);
}
}

class LazyTransformer {
constructor(iterator) {
this.iterator = iterator;
}

filter(predicate) {
this.iterator = filter(this.iterator, predicate);
return this;
}

map(fn) {
this.iterator = map(this.iterator, fn);
return this;
}

toArray() {
return Array.from(this.iterator);
}
}


const checkedItems = new Map()
.set("1" , true)
.set("1.5", true)
.set("2" , false);

const transformer = new LazyTransformer(checkedItems.entries());

transformer
.filter(([key, value]) => value)
.map(([key]) => key);

console.log(transformer.toArray());

关于javascript - new Map() State 获取特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65110663/

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