typescript - 是否有任何库或本机语法可以返回具有数组键和回调函数值的新对象?
问题描述
我想做一些功能 xxx 如下
const source = ['a','b','c']
const result = source.xxx(key => key + 'hello')
// or
const result = xxx(source,() => key => key + 'hello')
console.log(result)
// result
{
'a': 'ahello',
'b': 'bhello',
'c': 'chello'
}
我知道我可以编写如下代码来获取它
const source = ['a','b','c']
const xxx = (source: any[],callback) => {
let result = {}
source?.forEach(key => result = Object.assign({},result,{key: callback(key)})
return result
}
const result = xxx(source,(key) => key + 'hello')
但是是否有任何库或本机语法可以做到这一点而无需我自己编写?
解决方案
JavaScript 标准库中没有任何内容可以满足您的要求,但您可以通过多种方式实现。从表现力的角度来看,我喜欢map
and Object.fromEntries
:
const xxx = (source) => Object.fromEntries(
source.map(key => [key, `${key}hello`])
);
现场示例:
const xxx = (source) => Object.fromEntries(
source.map(key => [key, `${key}hello`])
);
const source = ['a','b','c'];
console.log(xxx(source));
这确实涉及一些中间数组等。
我也喜欢VLAZ 使用生成器函数的方法。
最简单的方法是循环:
const xxx = (source) => {
const result = {};
for (const key of source) {
result[key] = `${key}hello`;
}
return result;
};
现场示例:
const xxx = (source) => {
const result = {};
for (const key of source) {
result[key] = `${key}hello`;
}
return result;
};
const source = ['a','b','c'];
console.log(xxx(source));
有些人会把它硬塞进 a reduce
,但它不会给你买任何东西:
const xxx = (source) => source.reduce((result, key) => {
result[key] = `${key}hello`;
return result;
}, {});
现场示例:
const xxx = (source) => source.reduce((result, key) => {
result[key] = `${key}hello`;
return result;
}, {});
const source = ['a','b','c'];
console.log(xxx(source));
推荐阅读
- javascript - 根据选择参数更改 ArgTypes
- python - 使用 glBufferData 编辑 OpenGL VBO 会删除部分数据
- r - 三个选项的 ifelse 替代品
- google-api - 如果我使用 next_page_token,是否需要额外的响应?
- javascript - 如何在导航栏中制作响应式输入字段?
- r - cut 和 geom_histogram R 之间的 bin 值差异
- javascript - 使用 jquery 从引导下拉列表中获取选定的链接
- php - 在 PHP 中实时将 Google 语音转换为文本
- ios - 您可以直接从 CMSampleBuffer 播放音频吗?
- c# - 如何使用 Blazor c# 添加内联 html