gpt4 book ai didi

Javascript 通过对象搜索

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

不幸的是,我对 JS 中的对象还不太熟悉,并且只在心理学博士学位期间进行过一些编程,所以我没有很好的编程技能。我成功创建了一个很好的对象,它很好地捕获了我的数据结构:

var items = {
anamnese_akut: [{
id: 1,
question: 'Haben Sie die Beschwerden zum ersten Mal?',
answer: 'Ja, also so etwas ist noch nie passiert.'
}, {
id: 2,
question: 'Haben Sie in den letzten Wochen unbeabsichtigt Gewicht verloren?',
answer: 'Nein, bestimmt nicht.'
}],
anamnese_allgemein: [{
id: 3,
question: 'Sind bei Ihnen Vorerkrankungen bekannt?',
answer: 'Eigentlich nicht, nein.'
}, {
id: 4,
question: 'Wurden Sie schon mal operiert?',
answer: 'Ich hatte eine Blinddarmoperation als Kind, und in den letzten zwei Jahren dreimal eine Ausschabung nach Fehlgeburten.'
}]
};

我现在想要搜索一个输入变量,该变量恰好包含这 4 个问题之一,但可以来自两个类别。我已经成功使用此处的代码对未嵌套的对象执行类似的操作: JS search in object values ,但我无法让它工作,并且不知道如何使其适应具有 anamnese_akutanamnese_allgemein 等类别的对象。

我该如何调整搜索?将输入与问题进行比较后,我想要一个索引,以便我可以给出找到的问题的相应答案的输出。

最佳答案

我认为这里还有另一种构建数据的方法。您可以避免数组并使用 referencing by object properties 。优点是,您无需通过迭代“搜索”即可访问值,而是通过对象的属性哈希来访问值。

注意:出于可读性目的,我在示例中仅使用了数据的缩减子集。

示例 A - 基于索引号

var anamnese_akut = {
q: {
1:'Haben Sie die Beschwerden zum ersten Mal?',
2: 'Haben Sie in den letzten Wochen unbeabsichtigt Gewicht verloren?',
},

a: {
1:'Ja, also so etwas ist noch nie passiert.',
2:'Nein, bestimmt nicht.'
},
};

console.log(anamnese_akut.q['1']);
console.log(anamnese_akut.a['1']);

在此示例中,您将基于索引号(1、2、3...)来获取数据,并通过该编号访问您的问题和答案。

优点:不易出错,因为索引很短并且可以存储为数字。

缺点:索引号必须在 q 和 a 的整体上下文中已知。

示例 B - 通过 Id 访问但结构不同

var questions = {
anamnese_akut: {
1:'Haben Sie die Beschwerden zum ersten Mal?',
2:'Haben Sie in den letzten Wochen unbeabsichtigt Gewicht verloren?',
},
};

var answers = {
anamnese_akut: {
1: 'Ja, also so etwas ist noch nie passiert.',
2: 'Nein, bestimmt nicht.',
},
};

console.log(questions.anamnese_akut['1']);
console.log(answers.anamnese_akut['1']);

优点:分离问题和答案,仅需要索引即可访问(如示例 A 所示)

缺点:在结构设计层面需要做更多的工作,因为这里有更多的冗余(因为我们现在有两个带有 anamnese_akut 条目的对象)。

示例 C - 通过问题访问

var anamnese_akut = {
'Haben Sie die Beschwerden zum ersten Mal?' : 'Ja, also so etwas ist noch nie passiert.',
};

console.log(anamnese_akut['Haben Sie die Beschwerden zum ersten Mal?']);

优点:立即返回答案

缺点:问题字符串需要严格按照对象中给定的格式,否则访问失败并返回未定义。

就我个人而言,我会选择示例 B,因为它允许我拆分问题和答案数据上下文(这可能会变得很重要,具体取决于您的应用程序用例),并且仍然允许我通过一个给定的索引号进行访问。

关于Javascript 通过对象搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46139935/

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