gpt4 book ai didi

javascript - 将对象数组反规范化为非规范化数组

转载 作者:行者123 更新时间:2023-11-29 15:39:25 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来对 JavaScript 中的对象数组进行非规范化以获得一组数组。我需要一个表的结构(非规范化数据集)。

因此,给定输入:

var data = [
{ v1: 1, v2: [ { a: 1 }, { a: 2 } ] },
{ v1: 2, v2: [ { a: 3 }, { a: 4 } ], v3: 5 },
];

我需要这样的结构

var data2 = [
{ v1: 1, v2_a: 1 },
{ v1: 1, v2_a: 2 },
{ v1: 2, v2_a: 3, v3: 5 },
{ v1: 2, v2_a: 4, v3: 5 }
];

递归方式。

我的第一次尝试是在时间变量中添加属性进行深度全扫描搜索:

var result = [];
function aArray(data) {
for(var i = 0; i < data.length; i++){
var temp = {};
for(var prop in data[i]){
var val = data[i][prop];
if( Object.prototype.toString.call( val ) === '[object Array]' ) {
aArray(val);
}else{
temp[prop] = val;
}
}
result.push(temp);
}
}

但有些东西没有按预期工作

最佳答案

你可以试试这个解决方案

var data = [
{ v1: 1, v2: [ { a: 1 }, { a: 2 } ] },
{ v1: 2, v2: [ { a: 3 }, { a: 4 } ], v3: 5 },
];

function is_a(a){
return (typeof a == "object") && (a instanceof Array);
}
function extend(a, b){
for(var i in b){
a[i] = b[i];
}
return a;
}

现在主要逻辑在这里:

var p = data.map(function(item){

var output = {};
var list = [];

for(var i in item){
if(is_a(item[i])){
for(var j = 0; j < item[i].length; j++){
for(var z in item[i][j]){
var k = {}; k[i + "_" + z] = item[i][j][z];
list.push(k);
}
}
}
else{
output[i] = item[i];
}
}

for(var i = 0; i < list.length; i++){
list[i] = extend(list[i], output);
}

console.log(list);

});

输出:首先

0:对象v1: 1v2_a: 1

1:对象v1: 1v2_a: 2

第二个

0:对象v1: 2v2_a:3v3: 5

1:对象v1: 2v2_a:4v3: 5

尝试 demo

关于javascript - 将对象数组反规范化为非规范化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com