我有什么
{
"rowId": "1",
"product_name": [
"Product 1",
"Product 2",
"Product 3",
"Product 4",
"Product 5"
],
"product_tag": [
"1112231",
"1112232",
"1112233",
"1112234",
"1112235"
],
"version_id": [
"1.0",
"2.0",
"1.5",
"3.0",
"2.5"
]
}
我希望如何对其进行转换。(即,从上面给出的JSON中的每个数组中获取每个元素,并形成一个如下所示的新数组)。
{
[
"Product 1",
"1112231",
"1.0"
],
[
"Product 2",
"1112232",
"2.0"
],
[
"Product 3",
"1112233",
"1.5"
],
[
"Product 4",
"1112234",
"3.0"
],
[
"Product 5",
"1112235",
"2.5"
]
}
我尝试过的事情,
我尝试使用javascript的flatMap
函数(如下所示),但是没有运气。 (注意:此处 testData 是指上面粘贴的JSON数据)
[testData.product_name, testData.product_tag, testData.version_id].flatMap((i, index) => i[index]);
仅返回一条这样的记录(在这种情况下,我需要得到5条记录),
["Product 1","1112232","1.5"]
有人可以帮忙吗?
答案 0 :(得分:2)
您可以减少值/数组并将项分配给具有相同索引的数组。
var object = { rowId: "1", product_name: ["Product 1", "Product 2", "Product 3", "Product 4", "Product 5"], product_tag: ["1112231", "1112232", "1112233", "1112234", "1112235"], version_id: ["1.0", "2.0", "1.5", "3.0", "2.5"] },
result = Object.values(object).reduce((r, a) => {
Array.isArray(a) && a.forEach((v, i) => (r[i] = r[i] || []).push(v));
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
您可以按照自己喜欢的顺序使用构造包含product_name
,product_tag
和version_id
的数组。这是为了确保顺序正确。使用reduce
遍历数组。使用forEach
来循环内部数组。
let data = {"rowId":"1","product_name":["Product 1","Product 2","Product 3","Product 4","Product 5"],"product_tag":["1112231","1112232","1112233","1112234","1112235"],"version_id":["1.0","2.0","1.5","3.0","2.5"]}
let result = [data.product_name, data.product_tag, data.version_id].reduce((c, v) => {
v.forEach((e, i) => {
c[i] = c[i] || [];
c[i].push(e);
});
return c;
}, []);
console.log(result);
答案 2 :(得分:2)
您可以像这样使用Array.from
:
const input={"rowId":"1","product_name":["Product 1","Product 2","Product 3","Product 4","Product 5"],"product_tag":["1112231","1112232","1112233","1112234","1112235"],"version_id":["1.0","2.0","1.5","3.0","2.5"]}
const { product_name, product_tag, version_id } = input;
const output =
Array.from(input.product_name, (name, i) => ([ name, product_tag[i], version_id[i] ]))
console.log(output)
如果每个数组中的项目数不相等,则可以获得最大数组的长度来创建输出
// or Math.min if you don't want undefined items
const length = Math.max(product_name.length, product_tag.length, version_id.length)
const output =
Array.from({ length }, (_, i) => ([ product_name[i] , product_tag[i], version_id[i] ]))
答案 3 :(得分:1)
let arr = obj.product_name.map((it,index)=>[it,obj.product_tag[index],obj.version_id[index]])
答案 4 :(得分:0)
如果需要,您可以使用
const ar= {
"rowId": "1",
"product_name": [
"Product 1",
"Product 2",
"Product 3",
"Product 4",
"Product 5"
],
"product_tag": [
"1112231",
"1112232",
"1112233",
"1112234",
"1112235"
],
"version_id": [
"1.0",
"2.0",
"1.5",
"3.0",
"2.5"
]
};
let newAr = {};
for(var i = 0;i < ar.product_name.length;i++){
newAr[i]= [ar.product_name[i],ar.product_tag[i],ar.version_id[i]];
}