javascript - 要根据各自的键检查两个对象值数组?
问题描述
我正在尝试根据特定键比较两个对象值数组。两个对象具有相同的键,基于我必须检查值是否相等。一个数组是实际的 JSON 对象,第二个是测试数据,我们必须用 JSON 对象验证测试数据,而且如果测试数据值相同,它可能还有一些额外的空间,我们也需要修剪该值。
var actualObject= [
{
"q1": "componentWillMount"
},
{
"q2": "willComponentUpdate"
},
{
"q3": "setState"
},
{
"q4": "componentUpdated"
}
]
Var testData =[
{q1: "componentWillMount"},
{q2: "willComponentUpdate"},
{q3: " PropTypes"},
{q4: "componentDidMount"}]
在选择单选按钮时,我将从 Html 代码中获取 testData 值。现在我需要检查实际 JSON 中有多少答案是正确的。
它的 JS 代码:
var marks= 0;
var wrong = 0;
for(var k =0 ; k<actualObject.length;k++){
if(JSON.stringify(actualObject[k]) == JSON.stringify(testData[k])){
marks++;
}
else {
wrong++;
}
}
var actualObject = [{
"q1": "componentWillMount"
},
{
"q2": "willComponentUpdate"
},
{
"q3": "setState"
},
{
"q4": "componentUpdated"
}
]
var testData = [{
q1: "componentWillMount"
},
{
q2: "willComponentUpdate"
},
{
q3: " PropTypes"
},
{
q4: "componentDidMount"
}
];
var marks = 0;
var wrong = 0;
for (var k = 0; k < actualObject.length; k++) {
if (JSON.stringify(actualObject[k]) == JSON.stringify(testData[k])) {
marks++;
} else {
wrong++;
}
}
console.log(marks, wrong);
实际上,我想从每个键中获取值并将其与实际对象进行比较。
解决方案
如果我理解正确,这样的事情应该有效:
Object.entries(testData).forEach(function (entry) {
if (actualObject[entry[0]] === entry[1].trim()) {
//answers match
} else {
//answers don't match
}
});
如果您需要不考虑大小写进行比较,请更改entry[1].trim()
为entry[1].trim().toLowerCase()
.
编辑: 只是提醒您,也许您应该添加检查测试数据中的值是否为空/未定义,是否为字符串等。
推荐阅读
- java - 如何同时完成 Firebase 存储任务和 Firestore 任务?
- c++ - 将类的实例保存在全局变量中以重新设置类(创建“备份”)
- php - PHP和wampserver使用虚拟主机在用户计算机上加载数据太慢
- ajax - 如何通过反应在 onclick 函数中使用 ajax?
- sql - 使用巨大的日志文件进行完全恢复
- scala - 通过解析文件为包的元素赋值
- javascript - 如何使用赛普拉斯提取父元素
- ibm-midrange - 在 RPGLE 程序中添加新的入口参数
- c# - 如何根据 xamarin 表单中的其他按钮单击来扩展手风琴
- scala - 如何解开 Option[MyClassName]?