gpt4 book ai didi

javascript:从另一个 json 对象中获取默认值 - 以不同的排序顺序处理数组

转载 作者:行者123 更新时间:2023-12-03 04:22:25 25 4
gpt4 key购买 nike

我收到一个 json 作为参数,并且我还有一个模板基础 json。我需要检查模板 json 的所有对象是否都应存在于 tgt json 中,如果没有,则需要使用模板 json 初始化这些变量。

以下是我的实现。

var jsonBase = {  
"Et":"Val_Retain",
"A1": {
"A12": {
"A12Array": [
{
"key1": "val1"
},
{
"key2": "val2"
}
]
}
}
}

var jsonTgt = {
"Et":"OldVal",
"A1": {
"A12": {
"A12Array": [
{
"key1": "val1Old_Retain"
}
]
}
}
}

initKeys(jsonBase,jsonTgt)
function initKeys(obj,tgt) {
Object.keys(obj).forEach(function(element, key, _array) {
var cur;

if (typeof(tgt[element])=="undefined") {
tgt[element]=obj[element]
}
if (typeof(obj[element])=="object") {
initKeys(obj[element],tgt[element])
}
})
}

console.log(JSON.stringify(jsonTgt))

输出为:

{
"Et": "OldVal",
"A1": {
"A12": {
"A12Array": [{
"key1": "val1Old_Retain"
}, {
"key2": "val2"
}
]
}
}
}

有两个问题:

  • 这是正确的方法吗?或者可能有更有效的方法或有可用的 js/nodejs 库的更简单的吗?
  • 更重要的是 - 如果数组排序顺序与下面的模板不匹配,我该怎么办。

更改排序顺序

var json2 = {  
"Et":"OldVal",
"A1": {
"A12": {
"A12Array": [
{
"key2": "val1Old_Retain"
}
]
}
}
}

以上产生以下输出:

{
"Et": "OldVal",
"A1": {
"A12": {
"A12Array": [{
"key2": "val1Old_Retain",
"key1": "val1"
}, {
"key2": "val2"
}
]
}
}
}

与期望的相反:

{
"Et": "OldVal",
"A1": {
"A12": {
"A12Array": [{
"key1": "val1"
}, {
"key2": "val1Old_Retain"
}
]
}
}
}

最佳答案

这是我能够制作的第一个示例代码并且它有效,但是,我认为您实现代码的方式是错误的,因为我很确定如果您考虑到功能性,您可以做一些更简单的事情编程方法即those native methods from mdn ,和those ones from lodash library如果我这样做了,请不要忘记标记为已回答,否则请发表评论,以便我获得有关您的确切情况的更多信息

var _ = require('lodash')
let jsonInput = {
"Et": "Val_Retain",
"A1": {
"A12": {
"A12Array": [{
"key1": "val1"
}, {
"key2": "val2"
}]
}
}
}

let jsonInput2 = {
"Et": "OldVal",
"A1": {
"A12": {
"A12Array": [{
"key1": "val1Old_Retain"
}]
}
}
}

for (let key1 in jsonInput) {
if (key1 === 'Et') {
jsonInput[key1] = "OldVal"
} else {
for (let key2 in jsonInput[key1]) {
for (let key3 in jsonInput[key1][key2]) {
console.log(jsonInput[key1][key2][key3])
let listOfKeys = getKeys(jsonInput[key1][key2][key3])
console.log(listOfKeys)
console.log(jsonInput2[key1][key2])
console.log(key3)
let listOfKeys2 = getKeys(jsonInput2[key1][key2][key3])
console.log(listOfKeys2)
let uniqkeys = _.uniq(listOfKeys.concat(listOfKeys2))
let sortedUniqkeys = _.sortBy(uniqkeys)
let result = []
console.log('sortedUniqkeys', sortedUniqkeys)
sortedUniqkeys.forEach((key4, i) => {
let doc = {}
if (listOfKeys2.indexOf(key4) != -1) {
jsonInput2[key1][key2][key3].forEach((e, i) => {
if (e[key4]) {
doc[key4] = e[key4]
}
})
} else {
jsonInput[key1][key2][key3].forEach((e, i) => {
if (e[key4]) {
doc[key4] = e[key4]
}
})
}
result.push(doc)
console.log(key4, jsonInput[key1][key2][key3][key4])
console.log(result)
})
jsonInput[key1][key2][key3] = result
}
}
}
}

function getKeys(arr) {
console.log(arr)
return arr.reduce(function(accumulator, value, index, array) {
for (let key3 in value) {
accumulator.push(key3)
}
return accumulator
}, []);
}

console.log(JSON.stringify(jsonInput))

关于javascript:从另一个 json 对象中获取默认值 - 以不同的排序顺序处理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43885209/

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