Javascript/ Underscore JS 数据转换基于两个数组显示在table

Javascript/ Underscore JS Data transformation based from two arrays for display in a table

我有两个数组,一个是 'groups' 数组,另一个是 object 'items' 数组。我想根据这些条件转换数据:

  1. 如果 'groups' 数组中不存在该组,它将被标记为 'false',否则 'true'.
  2. 'result' 数组中的 'group' 数组属性对应 'groups' 数组的位置,如果我将 'group1' 的位置更改为 'group2', 'result'数组中对应的'groups'数组属性也应该改变位置。
  3. '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);

jsfiddle