Javascript 函数调试 - 为什么这个过滤器函数不能正常工作?

标签 javascript arrays function loops object

JavaScript - 中级算法脚本

我正在尝试创建一个 JavaScript 函数来查看对象数组(第一个参数)并返回具有匹配属性和值对的所有对象的数组。

虽然在 freeCodeCamp 给出了正确的解决方案,我想知道我的代码中有哪些问题和错误。另外,我找到了一个关于堆栈溢出的解决方案,但我没有发现我的代码有什么问题。


这是我的代码

function whatIsInAName(collection, source) {
  // What's in a name?
  var arr = [];
  // Only change code below this line
  var obj;
  var prop;
  var keys = Object.keys(source);
  for (var i = 0; i < collection.length; i++) {
    for (var j = 0; j < Object.keys(source).length; j++) {
      obj = collection[i];
      prop = Object.keys(source)[j];
      if (obj.hasOwnProperty(prop) && obj.prop === source.prop) {
        arr = arr.concat([obj]);
      }
    }
  }
  // Only change code above this line
  return arr;
}

whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

这是我得到的结果

[{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }]

代替

[{ first: "Tybalt", last: "Capulet" }]

最佳答案

在您的 if 语句中,您需要使用 obj[prop] === source[prop] 而不是 obj.prop === source。 Prop 。参见 computed property names .

由于两个对象都不包含属性 prop,因此条件的计算结果始终为 true(undefined === undefined)。


演示

(请注意,我将 obj = collection[i]; 移到了外部循环,因为每次都在内部循环中分配它是多余的)

function whatIsInAName(collection, source) {
  // What's in a name?
  var arr = [];
  // Only change code below this line
  var obj;
  var prop;
  var keys = Object.keys(source);
  for (var i = 0; i < collection.length; i++) {
    obj = collection[i];
    for (var j = 0; j < Object.keys(source).length; j++) {
      prop = Object.keys(source)[j];
      if (obj.hasOwnProperty(prop) && obj[prop] === source[prop]) {
        arr = arr.concat([obj]);
      }
    }
  }
  // Only change code above this line
  return arr;
}

let res = whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

console.log(res)

关于Javascript 函数调试 - 为什么这个过滤器函数不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100385/

相关文章:

java - 在 java 中对 ArrayList<Integer> 的数组进行排序

javascript - 我如何显示输入的结果及其排列?

javascript - 在javascript中更改函数上下文的目的是什么?

c - C 中的 Malloc - 返回值

javascript - 访问对象内部键的值

javascript - 在 C# 中的按钮 OnClick 事件之间调用 javascript

javascript - Word 加载项获取完整的文档文本?

javascript - 如何在延迟后显示模态?

javascript - 如何将 <span> 或 <div> 标签内容显示为星号 (*)

python - 使用 Python 且不使用 NumPy 的 2D 数组元素计算