gpt4 book ai didi

javascript - 将每个键有多个值的对象转换为 JS 中的对象数组

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

我有一个看起来像这样的对象:

 obj={"a": [1,2],"b": [3,4],"c": [5,6]}

我需要创建一个对象数组,其中每个对象都包含每个键,只有一个值与其顺序相对应,如下所示:

obj2=[{"a": 1, "b": 3, "c": 5},{"a": 2, "b": 4, "c": 6}]

此外,如果我有一个使用 JSON.stringify(obj) 的 JSON 字符串,是否可以以某种方式创建对应于 JSON.stringify(obj2) 的字符串直接从第一个开始?

最佳答案

const obj = { "a": [1, 2], "b": [3, 4], "c": [5, 6] }
// create an array to store result
const result = []
// for each key in obj
Object.keys(obj).forEach(key => {
// for each array element of the property obj[key]
obj[key].forEach((value, index) => {
// if an object doesn't exists at the current index in result
// create it
if (!result[index]) {
result[index] = {}
}
// at the result index, set the key to the current value
result[index][key] = value
})
})
console.log(result)

这是我的算法,给出了预期的结果。

Also, let's say i have a JSON string using JSON.stringify(obj), would it be somehow possible to create string corresponding to JSON.stringify(obj2) directly from the first one?

是的,您可以将 .toJSON 添加到 obj:

const obj = { "a": [1, 2], "b": [3, 4], "c": [5, 6] }
Object.setPrototypeOf(obj, {
toJSON: function () {
const result = []
Object.keys(this).forEach(key => {
this[key].forEach((value, index) => {
if (!result[index]) {
result[index] = {}
}
result[index][key] = value
})
})
return JSON.stringify(result);
}
})



console.log(JSON.stringify(obj))

您可以使用Object.setPrototypeOf,以便在Object.keys(obj).forEach迭代时toJSON方法不被计为可枚举键

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior

关于javascript - 将每个键有多个值的对象转换为 JS 中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51824076/

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