首页 > 解决方案 > 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

谢谢您的支持。

标签: javascript

解决方案


让我们看一下这一行:

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;
}

推荐阅读