gpt4 book ai didi

javascript - 迭代 JSON 格式的对象数组并修改和扩展它,最好使用 Underscore.js

转载 作者:行者123 更新时间:2023-11-30 16:10:41 24 4
gpt4 key购买 nike

我从数据库中检索到的 JSON 格式的数据被分配给一个变量 - 'var tabs'。

格式化后的JSON如下:

[{
"TAB_ID": "1",
"TAB_NAME": "TAB ONE",
"TAB_DISPLAY": "1",
"QUESTIONS": [{
"QUESTION_ID": 1,
"QUESTION": "Question number one",
"ANSWER": ""
}, {
"QUESTION_ID": 2,
"QUESTION": "Question number two",
"ANSWER": ""
}, {
"QUESTION_ID": 3,
"QUESTION": "Question number six",
"ANSWER": ""
}]
}, {
"TAB_ID": "1",
"TAB_NAME": "TAB ONE",
"TAB_DISPLAY": "1",
"QUESTIONS": [{
"QUESTION_ID": 1,
"QUESTION": "Question number one",
"ANSWER": "Some Other Answer"
}, {
"QUESTION_ID": 2,
"QUESTION": "Question number two",
"ANSWER": ""
}, {
"QUESTION_ID": 3,
"QUESTION": "Question number six",
"ANSWER": "Some Still Different Answer"
}]
}]

我需要遍历数组并执行以下操作:

对于 TAB 中的每个问题,如果问题有答案,我需要向问题添加一个额外的键/值“HAS_ANSWER”:“1”。

    {
"QUESTION_ID": 1,
"QUESTION": "Question number one",
"ANSWER": "Some Other Answer",
"HAS_ANSWER": "1"
}

我花了几个小时阅读帖子、查看示例代码和阅读 Underscore 文档,我知道这应该相当简单,但我不知道如何解决这个问题。

我的理解是我可能想使用嵌套的 _.map 函数,但我看过的所有示例都返回对象数组的一个子集,而不是修改和扩展的,我需要结束具有完全相同格式的 JSON 数据(对象数组),但具有上述更改和添加。

如有任何帮助,我们将不胜感激。

更新:

使用这个:

data = _.map(data, obj => _.map(obj.QUESTIONS, q => {
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}
return q;
}));

这会遍历问题,并相应地修改它们,但返回的对象会丢弃数据的外层 - 它只返回一个问题数组,并且不保留 TAB 数据:

    "TAB_ID": "1",
"TAB_NAME": "TAB ONE",
"TAB_DISPLAY": "1",

解决方案是在外部数组上使用 _.each,在内部数组上使用 _.map。

data = _.each(data, obj => _.map(obj.QUESTIONS, q => {
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}
return q;
}));

注意:此 => 语法仅适用于较新的 Javascript 实现,目前在 Safari/Webkit 中不受支持,因此请改用此语法以获得更好的兼容性

data = _.each(data, function(obj){
_.map(obj.QUESTIONS, function(q){
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}
return q;
});
});

这完全按照我需要的方式处理事情。

最佳答案

这可以使用纯 JavaScript 完成,使用 Array#map .

// Iterate over data
data = data.map(obj => obj.QUESTIONS.map(q => {
// If question has answer, then add `HAS_ANSWER` property
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}

// Update question object
return q;
}));

var data = [{
"TAB_ID": "1",
"TAB_NAME": "TAB ONE",
"TAB_DISPLAY": "1",
"QUESTIONS": [{
"QUESTION_ID": 1,
"QUESTION": "Question number one",
"ANSWER": ""
}, {
"QUESTION_ID": 2,
"QUESTION": "Question number two",
"ANSWER": ""
}, {
"QUESTION_ID": 3,
"QUESTION": "Question number six",
"ANSWER": ""
}]
}, {
"TAB_ID": "1",
"TAB_NAME": "TAB ONE",
"TAB_DISPLAY": "1",
"QUESTIONS": [{
"QUESTION_ID": 1,
"QUESTION": "Question number one",
"ANSWER": "Some Other Answer"
}, {
"QUESTION_ID": 2,
"QUESTION": "Question number two",
"ANSWER": ""
}, {
"QUESTION_ID": 3,
"QUESTION": "Question number six",
"ANSWER": "Some Still Different Answer"
}]
}];

data = data.map(obj => obj.QUESTIONS.map(q => {
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}
return q;
}));

console.log(data);
document.getElementById('output').innerHTML = JSON.stringify(data, 0, 4);
<pre id="output"></pre>


Underscore/Lodash 中的相同代码

data = _.map(data, obj => _.map(obj.QUESTIONS, q => {
if (q.ANSWER) {
q.HAS_ANSWER = 1;
}
return q;
}));

关于javascript - 迭代 JSON 格式的对象数组并修改和扩展它,最好使用 Underscore.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36299598/

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