javascript - JavaScript 对象更新功能不起作用
问题描述
我正在学习 JavaScript 并试图在这个测试练习中解决问题: FreeCodeCamp Record Collection
我不明白为什么它不起作用。对象详细信息和问题描述在上面的链接中。
function updateRecords(object, id, prop, value) {
if (value === '') {
delete object[id][prop];
} else if (prop === 'tracks') {
if (object[id][prop].hasOwnProperty('tracks') == false) {
object[id][prop] = [value];
} else if (value !== '') {
object[id][prop].push(value);
}
} else if (prop !== 'tracks' && value !== '') {
object[id][prop] = value;
}
return object;
}
这是我得到的错误:
// running tests
After updateRecords(collection, 5439, "tracks", "Take a Chance on Me"), tracks should have Take a Chance on Me as the last element.
After updateRecords(collection, 2468, "tracks", "Free"), tracks should have 1999 as the first element.
// tests completed
谢谢您的支持。
解决方案
让我们看一下这一行:
if (object[id][prop].hasOwnProperty('tracks') == false) {
如果我们用它们的值替换变量,我们得到:
if (object[5439]['tracks'].hasOwnProperty('tracks') == false) {
^ ^
...这总是会失败的。这是一个简化版本:
function updateRecords(object, id, prop, value) {
if (value === '') {
delete object[id][prop];
} else if (prop === 'tracks') {
if (!object[id].hasOwnProperty('tracks')) {
object[id][prop] = [];
}
object[id][prop].push(value);
} else {
object[id][prop] = value;
}
return object;
}
推荐阅读
- php - 我无法在三叶草加密问题上获得信用卡令牌
- javascript - 报告门户茉莉花测试永远不会完成
- c++ - MQ 客户端连接到多个队列管理器
- file - 我们如何使用 Snow sql 执行驻留在 s3 bucket/Stage 中的雪花脚本文件
- ios - 如何使用适用于 iOS 的 agora sdk 使用屏幕共享选项
- angularjs - 如何通过 AngularJs 发送 AntiForgeryToken?
- html - Django POST 请求未决问题 (AJAX) 并没有出现在终端上
- flutter - 根据 List 中第一个下拉列表的值填充第二个下拉列表
- elasticsearch - Elasticsearch 嵌套过滤器排序
- google-data-studio - GCP 已经过验证,但在数据工作室连接器上仍显示未经验证的屏幕