gpt4 book ai didi

javascript - 如何使用 json 对象上的每个排列组合创建 json 对象数组

转载 作者:行者123 更新时间:2023-12-01 01:19:51 24 4
gpt4 key购买 nike

我有一个如下所示的 json 对象,它有一些键值对,其中值是一个数组..

{
"bookSet": {
"book": ["book1", "book2", "book3"],
"title": ["title1", "title2"],
"author": ["author1"],
"publisher": ["publisher1"]
}
}

现在我想解析这个 JSON 并生成一个 JSON 数组,如下所示,其中每个数组都是上面 json 中每个值的 PNC...

{
"eachBook": [{
"book": "book1",
"title": "title1",
"author": "author1",
"publisher": "publisher1"
},
{
"book": "book2",
"title": "title1",
"author": "author1",
"publisher": "publisher1"
}, {
"book": "book3",
"title": "title1",
"author": "author1",
"publisher": "publisher1"
}, {
"book": "book1",
"title": "title2",
"author": "author1",
"publisher": "publisher1"
}, {
"book": "book2",
"title": "title2",
"author": "author1",
"publisher": "publisher1"
}, {
"book": "book3",
"title": "title2",
"author": "author1",
"publisher": "publisher1"
}
]
}

最佳答案

如果包含对象的数组再次调用 getCartesian 并构建新对象,您可以采用递归函数来分隔所有键/值对并通过迭代值构建新的笛卡尔积。

这也适用于嵌套对象。

该算法非常简单,因为它接受任何带有值的属性,而不是数组或对象,并保留该值并迭代所有其他数组或对象属性。该算法保留内部结构,仅将原始值作为给定结构的结果值。

一开始,它接受一个对象/数组,获取所有条目并使用带有空对象的数组来迭代它们。

空数组 temp 是新结果。

为了创建新元素,累加器 r 会被迭代并收集新值。这是制作第一级笛卡尔积的部分。

对于更深的层次,检查一个值,如果是一个对象,则进行递归调用,并将新结果用作实际的键。

function getCartesian(object) {
return Object.entries(object).reduce((r, [k, v]) => {
var temp = [];
r.forEach(s =>
(Array.isArray(v) ? v : [v]).forEach(w =>
(w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
temp.push(Object.assign({}, s, { [k]: x }))
)
)
);
return temp;
}, [{}]);
}

var input = { bookSet: { book: ["book1", "book2", "book3"], title: ["title1", "title2"], author: ["author1"], publisher: ["publisher1"] } },
cartesian = { eachBook: getCartesian(input.bookSet) };

console.log(cartesian);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何使用 json 对象上的每个排列组合创建 json 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54330504/

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