如何将这个为每个对象添加一个键的 _.each 函数转换到 Ramda 中?

How to convert this _.each function that adds a key to each object into Ramda?

http://jsfiddle.net/leongaban/4xfc4g3c/1/

Lodash

const spamData = [true, true, false];
const tweets   = [{ tweet: "Hello" }, { tweet: "World" }, { tweet: "Pork"}];

_.each(spamData, (value, i) => {
  tweets[i]['spam'] = value;
});

log(tweets);

卡在这一点上:

Ramda

const setSpamValues = (spamValue) => {
    return spamValue;
};

R.forEach(setSpamValues, spamData);

不确定现在将返回的 spamValue 发送到每个推文的名为 spam 的新密钥的最佳方法是什么。

在利用图书馆为您解决这些问题之前,您应该养成思考如何自己解决这些问题的习惯。如果您正在为这个基本问题而苦苦挣扎,您可能想要完全重新考虑您对 Ramda 的使用。一旦您了解了 Ramda 提供的实用程序,也许就可以使用它了。

这是您使用普通旧 JavaScript.

寻找的结果

const spamData = [true, true, false];
const tweets   = [{ tweet: "Hello" }, { tweet: "World" }, { tweet: "Pork"}];

let result = tweets.map((t,i) =>
  Object.assign({}, t, {spam: spamData[i]})
);

console.log(result);
// [
//   {"spam": true, "tweet": "Hello"},
//   {"spam": true, "tweet": "World"},
//   {"spam": false, "tweet": "Pork"}
// ]


如果你坚持使用 Ramda,你可能正在寻找 R.zip

const spamData = [true, true, false];
const tweets   = [{ tweet: "Hello" }, { tweet: "World" }, { tweet: "Pork"}];

let result = R.zip(spamData, tweets).map(([spam, tweet]) =>
  Object.assign({}, tweet, {spam})
);

console.log(result);
// [
//   {"spam": true, "tweet": "Hello"},
//   {"spam": true, "tweet": "World"},
//   {"spam": false, "tweet": "Pork"}
// ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.js"></script>

ps,下次你问问题时应该包括预期的输出。


您也可以利用 R.zipWith and R.assoc 来实现这一点。

const updatedTweets = R.zipWith(R.assoc('spam'), spamData, tweets);