gpt4 book ai didi

javascript - Lodash 中的 partialRight 似乎什么都不做

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:19 32 4
gpt4 key购买 nike

(我找不到 open Lodash Slack channel ,这就是我在这里发帖的原因。)

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

运行 fiddle 时,请在浏览器中打开 JavaScript 控制台以查看日志。我在 Chrome 中对其进行了测试。

    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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

最佳答案

lodash 文档中有两个支持语句可以回答您的问题:

lodash#partialRight

This method is like _.partial except that partially applied arguments are appended to the arguments it receives.

lodash#map

Creates an array of values by running each element in collection thru iteratee. The iteratee is invoked with three arguments: (value, index|key, collection).

请注意,在 lodash#map 迭代器中传递了三个参数,并且由于 keyRenamer 是作为迭代器传递的,因此我们可以得出结论,调用签名看起来像这样:

keyRenamer(value, index, collection, keyMappings);

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

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

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);
.as-console-wrapper{min-height:100%;top:0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

关于javascript - Lodash 中的 partialRight 似乎什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240740/

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