当前位置: 首页 > 知识库问答 >
问题:

使用扩展将数组映射到对象

谈琛
2023-03-14

我想把下面的数组转换成一个稍微修改的对象(见下文)。我也在尝试使用扩展运算符,但还没有弄清楚如何做到这一点。我试图避免使用lodash(用于教育目的)。

var arr = [
    { mainkey: 'John', val1: 'ABC', val2: '..', val3: '..' },
    { mainkey: 'Mary', val1: 'DEF', val2: '..', val3: '..' },
    { mainkey: 'Ann', val1: 'XYZ', val2: '..', val3: '..' }
  ];
newObj = {
  John: {val1: 'ABC', val2: '..', val3: '..' },
  Mary: {val1: 'DEF', val2: '..', val3: '..' },
  Ann:  {val1: 'XYZ', val2: '..', val3: '..' }
}
var result = arr.reduce(function(map, obj) {
    map[obj.mainkey] = obj.val1;
    // map[obj.mainkey] = { obj.val1, obj.val2 }; <-- DOESNT WORK
    return map;
}, {});
    null

共有1个答案

姬慎之
2023-03-14

只需更改为..

    var result = arr.reduce(function(map, obj) {
        map[obj.mainkey] = {
            val1: obj.val1,
            val2: obj.val2,
        };
        return map;
    }, {});        

更新:添加其他动态版本。

var result = arr.reduce(function(map, obj) {
    let targetProps = Object.getOwnPropertyNames(obj).filter(
        (prop) => prop !== "mainkey"
    );
    map[obj.mainkey] = {};
    targetProps.forEach( (prop) => {
        map[obj.mainkey][prop] = obj[prop];
    });
    return map;
}, {});   
 类似资料:
  • 我正在尝试将我的对象[]数组映射并过滤到int[]数组。如果对象是int,效果很好,但如果不是int,则抛出强制转换异常。我想知道我是否可以在lambda表达式中附加一个try/catch?这是我的代码: 或者更好的方法是试着抓住整个街区?

  • 我有一个POJO旅行者,变量为字符串name,字符串city。我有一个字符串数组,比如 我想要一张地图,上面有名字和城市列表。 我无法给旅行者绘制地图。有没有一种方法可以为旅行者绘制地图,并将其名称作为重点和城市列表。

  • 使用一个函数将数组的值映射到对象,其键值对中,原始值作为键,映射值作为值。 使用一个匿名的内部函数作用域来声明一个 undefined 的内存空间,使用闭包来存储返回值。 使用一个新的 Array 来存储带有函数映射的数组和一个逗号运算符来返回第二个步骤,而不需要从一个上下文移动到另一个上下文(由于闭包和操作顺序)。 const mapObject = (arr, fn) => (a => (

  • JSONMappingException:无法反序列化com.demo.json.model.abc实例 编辑:我的POJO如下所示: 有人能提出解决办法吗? 有人能帮我做这个吗?

  • 问题内容: 在JSF中,我可以将Faces Servlet映射到各种URL模式。例如。 但是我想要的是将Faces Servlet映射为 无 扩展名。意思是,如果我在Web根目录中有一个页面,我想使用来请求此页面。 我看了一个问题,如何配置不带文件扩展名的JSFURL映射?这在某种程度上是可行的,但它要求我分别映射我拥有的每个文件(如果我输入错了,请更正我)。 如何将所有文件一次映射到Faces

  • Hi这似乎适用于添加额外的方法,但不适用于在现有方法上添加新的注释。假设我们有以下课程: