javascript - 过滤对象键并创建新的嵌套键

标签 javascript arrays object lodash

我有一个像这样的参数数组:

[param1, param2_experience, param3]

我有另一个像这样的对象数组:

[
  {
    id: 123,
    param1_issue: "some",
    param1_star: 5,
    param2_experience_time_taken: "45 minutes",
    param3_issue_other: "some other"
  },
  {
    id: 456,
    param1_issue: "some issue",
    param1_star: 3.5,
    param3_issue_other: "some other issue"
  }
]

我想在第一个数组的基础上溢出这个数组。像这样的东西:

[
  {
    id: 123,
    param1: {
      issue: "some",
      star: 5
    },
    param2_experience: {
       time_taken: "45 minutes"
    },
    param3: {
       issue_other: "some other"
    }
  },
  {
    id: 456,
    param1: {
      issue: "some issue",
      star: 3.5
    },
    param3: {
       issue_other: "some other issue"
    }
  }
]

更好的方法是什么?该数组可以包含数千个对象。

最佳答案

您可以将数组中的每个元素映射到具有第一个数组格式的新对象。

var keys = ["param1", "param2_experience", "param3"];
var data = [{"id":123,"param1_issue":"some","param1_star":5,"param2_experience_time_taken":"45 minutes","param3_issue_other":"some other"},{"id":456,"param1_issue":"some issue","param1_star":3.5,"param3_issue_other":"some other issue"}];

var output = _.map(data, e => {
  var obj = {};
  _.forIn(e, (val, key) => {
    var bucket = _.find(keys, k => _.startsWith(key, k));
    _.set(obj,
          bucket 
            ? [bucket, key.slice(bucket.length + 1)]
            : key,
          val);
  });
  return obj;
});

console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>

关于javascript - 过滤对象键并创建新的嵌套键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38805666/

相关文章:

javascript - 带信息窗口的多个标记

javascript - 通过分析字符串中的日期详细信息对字符串数组进行排序

c++ - 将一维, "flattened"索引转换为N维数组的N维 vector 索引

oop - UML 中的多态性和泛化

c++ - 提取基类指针

javascript - 以编程方式添加项目时,Jquery textarea autogrow 不起作用

javascript - react 更新永远循环 componentDidUpdate

JQuery获取数组的第n个元素

c++ - 将 2D char* 数组传递给函数时出错

java - java中动态定义集合或对象类型变量