{
"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/