映射或每个具有 Underscore.js 的值
Map or Each for Values with Underscore.js
我正在尝试找出更新我的 underscore.js .map
方法的最佳方法,因为包含了一个新的字段值,该值应该与传递给 [=16 的当前值分组=].我应该在新更新中使用 .map
还是 .each
以及我应该将值存储为对象还是数组中的对象并将其传递给 .map
或 .each
以实现我想要的结果?目前我尝试使用 .map
的对象方法,但值以数组的形式出现。
正确格式:
[ { reportTitle: 'Title1', reportLink: 'test.com', id: 166 },
{ reportTitle: 'Title2', reportLink: 'test2.com', id: 166 } ]
原件(工作):
var links = _.map(req.body.reportLink, function(link){
return {
reportLink: link,
id: blog.id
};
});
输出:
[ { reportLink: 'test.com', id: 166 },
{ reportLink: 'test2.com', id: 166 } ]
更新(不工作):
var linkAttributes = { title: req.body.reportTitle, link: req.body.reportLink}
var links = _.map(linkAttributes, function(link) {
return {
reportTitle: link.title,
reportLink: link.link,
id: blog.id
};
});
输出:
[ { reportTitle: [ 'Test 1', 'Test 2' ],
reportLink: [ 'test1.com', 'test2.com' ],
id: 164 } ]
_.map
-> 第一个参数应该是 array
var linkAttributes = [
{
title: req.body.reportTitle,
link: req.body.reportLink
}
]; // shoud be array
var links = _.map(linkAttributes, function(link) {
return {
reportTitle: link.title,
reportLink: link.link,
id: blog.id
};
现在很清楚你在问什么,下面应该可以解决问题:
const zip = (arr1, arr2) =>
[...new Array(Math.max(arr1.length, arr2.length))].map(
(_, i) => [arr1[i], arr2[i]],
);
const reportTitle = ['test-title', 'test-title2'];
const reportLink = ['test.com', 'test2.com'];
console.log(
zip(reportTitle, reportLink).map(
([reportTitle, reportLink]) => ({
reportTitle,
reportLink,
id: 166,
}),
),
);
zip 实用程序采用 2 个数组(例如 [1,2,3] 和 [5,6,7])和 returns 一个数组,每个数组都有一个元素:([[1,5],[2,6],[3,7]
来自示例)
然后maps在这个数组上创建一个对象数组。
传递给 map 的函数使用 destructuring parameters 快速命名传递给 map 函数的数组中的 2 个元素。
我正在尝试找出更新我的 underscore.js .map
方法的最佳方法,因为包含了一个新的字段值,该值应该与传递给 [=16 的当前值分组=].我应该在新更新中使用 .map
还是 .each
以及我应该将值存储为对象还是数组中的对象并将其传递给 .map
或 .each
以实现我想要的结果?目前我尝试使用 .map
的对象方法,但值以数组的形式出现。
正确格式:
[ { reportTitle: 'Title1', reportLink: 'test.com', id: 166 },
{ reportTitle: 'Title2', reportLink: 'test2.com', id: 166 } ]
原件(工作):
var links = _.map(req.body.reportLink, function(link){
return {
reportLink: link,
id: blog.id
};
});
输出:
[ { reportLink: 'test.com', id: 166 },
{ reportLink: 'test2.com', id: 166 } ]
更新(不工作):
var linkAttributes = { title: req.body.reportTitle, link: req.body.reportLink}
var links = _.map(linkAttributes, function(link) {
return {
reportTitle: link.title,
reportLink: link.link,
id: blog.id
};
});
输出:
[ { reportTitle: [ 'Test 1', 'Test 2' ],
reportLink: [ 'test1.com', 'test2.com' ],
id: 164 } ]
_.map
-> 第一个参数应该是 array
var linkAttributes = [
{
title: req.body.reportTitle,
link: req.body.reportLink
}
]; // shoud be array
var links = _.map(linkAttributes, function(link) {
return {
reportTitle: link.title,
reportLink: link.link,
id: blog.id
};
现在很清楚你在问什么,下面应该可以解决问题:
const zip = (arr1, arr2) =>
[...new Array(Math.max(arr1.length, arr2.length))].map(
(_, i) => [arr1[i], arr2[i]],
);
const reportTitle = ['test-title', 'test-title2'];
const reportLink = ['test.com', 'test2.com'];
console.log(
zip(reportTitle, reportLink).map(
([reportTitle, reportLink]) => ({
reportTitle,
reportLink,
id: 166,
}),
),
);
zip 实用程序采用 2 个数组(例如 [1,2,3] 和 [5,6,7])和 returns 一个数组,每个数组都有一个元素:([[1,5],[2,6],[3,7]
来自示例)
然后maps在这个数组上创建一个对象数组。
传递给 map 的函数使用 destructuring parameters 快速命名传递给 map 函数的数组中的 2 个元素。