Javascript/ Underscore JS 数据转换基于两个数组显示在table
Javascript/ Underscore JS Data transformation based from two arrays for display in a table
我有两个数组,一个是 'groups' 数组,另一个是 object 'items' 数组。我想根据这些条件转换数据:
- 如果 'groups' 数组中不存在该组,它将被标记为 'false',否则 'true'.
- 'result' 数组中的 'group' 数组属性对应 'groups' 数组的位置,如果我将 'group1' 的位置更改为 'group2', 'result'数组中对应的'groups'数组属性也应该改变位置。
- 'Group' 'result' 数组中的属性数组大小应与 'groups' 数组的大小相同。
您只能在可能有帮助的情况下使用 underscore.js。谢谢!
var groups = ["group1", "group2"] // Can increase dynamically, e.g. ["group1", "group2", "group3"],
var items = // Given that the 'group' attribute of each item should correspond dynamically too with groups array increase/ decrease
[ // It can become ["group1", "group2", "group3"] as values in an item when the 'groups' array is ["group1", "group2", "group3"]
{
name: "object 1",
group: ["group1"]
},
{
name: "object 2",
group: ["group1", "group2"]
},
{
name: "object 3",
group: ["group2"]
}
]
它应该变成这样:
var result =
[
{
name: "object 1",
group: ["true", "false"] // group attribute order should base on the groups array and increase in size as groups increase
}, // true in the first value since it has "group1" in the 'group' array attribute in the 'items' array and false as the second value because it doesn't have "group2"
{
name: "object 2",
group: ["true", "true"]
},
{
name: "object 3",
group: ["false", "true"]
}
]
顺便说一句,这将用于在 angular JS 应用程序的 table 中显示数据。 headers 列是 'groups' 数组,行是 'result' 数组。
var groups = ["group1", "group2"] // Can increase dynamically, e.g. ["group1", "group2", "group3"],
var items = // Given that the 'group' attribute of each item should correspond dynamically too with groups array increase/ decrease
[ // It can become ["group1", "group2", "group3"] as values in an item when the 'groups' array is ["group1", "group2", "group3"]
{
name: "object 1",
group: ["group1"]
},
{
name: "object 2",
group: ["group1", "group2"]
},
{
name: "object 3",
group: ["group2"]
}
];
function transform(items, groups) {
return _.map(items, function(item) {
var groupsTransformed = _.map(groups, function(group) {
return (item.group.indexOf(group) >= 0);
});
item.group = groupsTransformed;
return item;
});
}
var transformedData = transform(items, groups);
document.getElementById('res').innerHTML = JSON.stringify(transformedData);
console.log(transformedData);
我有两个数组,一个是 'groups' 数组,另一个是 object 'items' 数组。我想根据这些条件转换数据:
- 如果 'groups' 数组中不存在该组,它将被标记为 'false',否则 'true'.
- 'result' 数组中的 'group' 数组属性对应 'groups' 数组的位置,如果我将 'group1' 的位置更改为 'group2', 'result'数组中对应的'groups'数组属性也应该改变位置。
- 'Group' 'result' 数组中的属性数组大小应与 'groups' 数组的大小相同。
您只能在可能有帮助的情况下使用 underscore.js。谢谢!
var groups = ["group1", "group2"] // Can increase dynamically, e.g. ["group1", "group2", "group3"],
var items = // Given that the 'group' attribute of each item should correspond dynamically too with groups array increase/ decrease
[ // It can become ["group1", "group2", "group3"] as values in an item when the 'groups' array is ["group1", "group2", "group3"]
{
name: "object 1",
group: ["group1"]
},
{
name: "object 2",
group: ["group1", "group2"]
},
{
name: "object 3",
group: ["group2"]
}
]
它应该变成这样:
var result =
[
{
name: "object 1",
group: ["true", "false"] // group attribute order should base on the groups array and increase in size as groups increase
}, // true in the first value since it has "group1" in the 'group' array attribute in the 'items' array and false as the second value because it doesn't have "group2"
{
name: "object 2",
group: ["true", "true"]
},
{
name: "object 3",
group: ["false", "true"]
}
]
顺便说一句,这将用于在 angular JS 应用程序的 table 中显示数据。 headers 列是 'groups' 数组,行是 'result' 数组。
var groups = ["group1", "group2"] // Can increase dynamically, e.g. ["group1", "group2", "group3"],
var items = // Given that the 'group' attribute of each item should correspond dynamically too with groups array increase/ decrease
[ // It can become ["group1", "group2", "group3"] as values in an item when the 'groups' array is ["group1", "group2", "group3"]
{
name: "object 1",
group: ["group1"]
},
{
name: "object 2",
group: ["group1", "group2"]
},
{
name: "object 3",
group: ["group2"]
}
];
function transform(items, groups) {
return _.map(items, function(item) {
var groupsTransformed = _.map(groups, function(group) {
return (item.group.indexOf(group) >= 0);
});
item.group = groupsTransformed;
return item;
});
}
var transformedData = transform(items, groups);
document.getElementById('res').innerHTML = JSON.stringify(transformedData);
console.log(transformedData);