首页 > 解决方案 > 是否有任何库或本机语法可以返回具有数组键和回调函数值的新对象?

问题描述

我想做一些功能 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')

但是是否有任何库或本机语法可以做到这一点而无需我自己编写?

标签: typescript

解决方案


JavaScript 标准库中没有任何内容可以满足您的要求,但您可以通过多种方式实现。从表现力的角度来看,我喜欢mapand 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));


推荐阅读