javascript - 需要基于现有对象在 Javascript 中创建对象,考虑到其性能,这是有效的

标签 javascript arrays json object

{
  "name": "test name",
  "description": "test desc",
  "data_table_id": 3,
  "column_0": {
    "value": "1",
    "label": "name"
  },
  "condition_0": {
    "value": "101",
    "label": "Is equal to"
  },
  "column_1": {
    "value": "2",
    "label": "age"
  },
  "condition_1": {
    "value": "102",
    "label": "Is less than"
  }
}

我在 JavaScript 中有上述对象。我需要从这个对象创建以下对象。需要找到一种从性能 Angular 来看良好的方法。以下条件数组基于上述对象中以“column_”开头的对象。 例如:如果有column_0、column_1、column_2,则条件数组的长度将为3。这些列将动态出现,可以从0-n,n = >= 0的任意整数。(即column_0 -列_n)

相同的条件适用于条件_0、条件_1。此外,condition_0 始终与column_0 关联,condition_1 始终与column_1 关联,依此类推。

{
    "name": "test name",
    "description": "test desc",
    "data_table_id": 3,
    "conditions" : [
      {
          "column_id": 1, // column_0.value
          "column_name": "name", // column_0.label
          "condition_id": 101 // condition_0.value
      },
      {
          "column_id": 2, // column_1.value
          "column_name": "age", // column_1.label
          "condition_id": 102 // condition_1.value
      }
  ],
}

最佳答案

使用...rest提取条件,减少Object.entries,构造数据结构并将其推送到结果数组,最后将所有内容重新组合在一起:

const data = {
  "name": "test name",
  "description": "test desc",
  "data_table_id": 3,
  "column_0": {
    "value": "1",
    "label": "name"
  },
  "condition_0": {
    "value": "101",
    "label": "Is equal to"
  },
  "column_1": {
    "value": "2",
    "label": "age"
  },
  "condition_1": {
    "value": "102",
    "label": "Is less than"
  }
}

const {
  name,
  description,
  data_table_id,
  ...rest
} = data;

const conditions = Object.entries(rest).reduce((all, [key, obj]) => {
  if (key.startsWith('condition')) {
    const id = key.split('_')[1];

    const condition = {
      "column_id": rest[`column_${id}`].value,
      "column_name": rest[`column_${id}`].label,
      "condition_id": obj.value,
    }

    all.push(condition)
  }


  return all;
}, []);

const result = {
  name,
  description,
  data_table_id,
  conditions
}

console.log(result)

关于javascript - 需要基于现有对象在 Javascript 中创建对象,考虑到其性能,这是有效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54356147/

相关文章:

javascript - 将整个 HTML 页面导入到另一个页面

Javascript:返回字符串的两部分......

c - itoa 函数不适用于单位数整数

json - 为什么 TypeScript 编译器会忽略 tsconfig.json?

json - asp.net mvc 4 与 JavaScript 模板

javascript - 在 socket.io 中获取聊天室中有多少人

javascript - 从 Promise 构造中捕获错误

PHPUnit:期望以数组作为参数的方法调用

c++:本地数组定义与 malloc 调用

json - ils。域类。 Json字符串问题