如何将这个为每个对象添加一个键的 _.each 函数转换到 Ramda 中?
How to convert this _.each function that adds a key to each object into Ramda?
http://jsfiddle.net/leongaban/4xfc4g3c/1/
const spamData = [true, true, false];
const tweets = [{ tweet: "Hello" }, { tweet: "World" }, { tweet: "Pork"}];
_.each(spamData, (value, i) => {
tweets[i]['spam'] = value;
});
log(tweets);
卡在这一点上:
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);
http://jsfiddle.net/leongaban/4xfc4g3c/1/
const spamData = [true, true, false];
const tweets = [{ tweet: "Hello" }, { tweet: "World" }, { tweet: "Pork"}];
_.each(spamData, (value, i) => {
tweets[i]['spam'] = value;
});
log(tweets);
卡在这一点上:
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);