首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >洛达什的partialRight似乎什么都没做

洛达什的partialRight似乎什么都没做
EN

Stack Overflow用户
提问于 2017-09-15 13:27:14
回答 1查看 1.4K关注 0票数 4

(我找不到打开 Lodash Slack频道,这就是我在这里发帖的原因。)

你能告诉我为什么这个小提琴中的小提琴似乎什么都不做吗?correctRenameKeys函数正确地重命名了提供的object中的键,但是wrongRenameKeys函数--应该完全相同--却没有。

在运行小提琴时,请打开浏览器中的JavaScript控制台以查看日志。我在Chrome里测试过。

代码语言:javascript
复制
    const renameKeysOfOneObject = (object, keyMappings) => {
      return _.reduce(object, function(result, value, key) {
        key = keyMappings[key] || key;
        result[key] = value;
        return result;
      }, {});
    };

    const correctRenameKeys = (objects, keyMappings) => {
        const keysRenamer = object => renameKeysOfOneObject(object, keyMappings);
        return _.map(objects, keysRenamer);
    };

    const wrongRenameKeys = (objects, keyMappings) => {
        const keysRenamer = _.partialRight(renameKeysOfOneObject, keyMappings);
        return _.map(objects, keysRenamer);
    };

    const object = {keyToBeRenamed: 'someValue'};
    const objects = [object];
    const keyMapping = {keyToBeRenamed: 'newKeyName'};

    const correctlyRenamed = correctRenameKeys(objects, keyMapping);
    const wronglyRenamed = wrongRenameKeys(objects, keyMapping);

    console.assert(_.isEqual(correctlyRenamed, wronglyRenamed), 
                   "The two objects should be equal. " + 
                   "The 'keyToBeRenamed' key should have been renamed to 'newKeyName'.");
    console.log(correctlyRenamed);
    console.log(wronglyRenamed);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-15 14:15:04

提交文件中有两种支持声明可以回答您的问题:

lodash#partialRight

此方法与_.partial类似,只是部分应用的参数被附加到它接收的参数中。

lodash#map

通过通过iteratee集合中的每个元素来创建一个值数组。迭代器是使用三个参数调用的:(value、Index而行键、集合)。

请注意,在lodash#map迭代器中传递了三个参数,而且由于keyRenamer是作为迭代传递的,所以我们可以得出结论,调用签名如下所示:

代码语言:javascript
复制
keyRenamer(value, index, collection, keyMappings);

如果您真的想实现部分应用函数renameKeysOfOneObject的第二个参数的效果,那么请使用lodash#partial

代码语言:javascript
复制
const wrongRenameKeys = (objects, keyMappings) => {
    const keysRenamer = _.partial(renameKeysOfOneObject, _, keyMappings);
    return _.map(objects, keysRenamer);
};

代码语言:javascript
复制
const renameKeysOfOneObject = (object, keyMappings) => {
      return _.reduce(object, function(result, value, key) {
        key = keyMappings[key] || key;
        result[key] = value;
        return result;
      }, {});
    };

    const correctRenameKeys = (objects, keyMappings) => {
        const keysRenamer = object => renameKeysOfOneObject(object, keyMappings);
        return _.map(objects, keysRenamer);
    };

    const wrongRenameKeys = (objects, keyMappings) => {
        const keysRenamer = _.partial(renameKeysOfOneObject, _, keyMappings);
        return _.map(objects, keysRenamer);
    };

    const object = {keyToBeRenamed: 'someValue'};
    const objects = [object];
    const keyMapping = {keyToBeRenamed: 'newKeyName'};

    const correctlyRenamed = correctRenameKeys(objects, keyMapping);
    const wronglyRenamed = wrongRenameKeys(objects, keyMapping);

    console.assert(_.isEqual(correctlyRenamed, wronglyRenamed), 
                   "The two objects should be equal. " + 
                   "The 'keyToBeRenamed' key should have been renamed to 'newKeyName'.");
    console.log(correctlyRenamed);
    console.log(wronglyRenamed);
代码语言:javascript
复制
.as-console-wrapper{min-height:100%;top:0}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46240740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档