gpt4 book ai didi

javascript - 过滤器在 Freecodecamp 中的“你为什么要练习”中不起作用

转载 作者:行者123 更新时间:2023-12-03 05:31:06 24 4
gpt4 key购买 nike

我正在做一项练习,要求:

<小时/>

创建一个函数,该函数查找对象数组(第一个参数)并返回具有匹配属性和值对(第二个参数)的所有对象的数组。如果要包含在返回的数组中,源对象的每个属性和值对都必须存在于集合中的对象中。

<小时/>

我尝试通过以下方式创建此内容:

function whatIsInAName(collection, source) {
// What's in a name?
var arr = [];
// Only change code below this line
var srcKeys = Object.keys(source);

arr = collection.filter(function(obj) {
for (var i = 0;i < srcKeys;i++) {
return obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] == source[srcKeys[i]];
}
});

// Only change code above this line
return arr;
}


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

但是这会返回一个空数组。我想也许我没有完全理解过滤方法的功能。

列出的解决方案之一是:

function whatIsInAName(collection, source) {
// "What's in a name? that which we call a rose
// By any other name would smell as sweet.”
// -- by William Shakespeare, Romeo and Juliet
var srcKeys = Object.keys(source);

// filter the collection
return collection.filter(function (obj) {
for(var i = 0; i < srcKeys.length; i++) {
if(!obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] !== source[srcKeys[i]]) {

return false;
}
}

return true;
});
}

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

请尝试彻底解释,以帮助像我这样的菜鸟理解为什么我所做的没有给出与给定答案相同的输出:(

感谢一百万您的帮助。

最佳答案

您的代码中有两个错误。

首先,在 for 循环中,您将 i 与数组而不是 array.length 进行比较。

for (var i = 0;i < srcKeys;i++) {

应该是

for (var i = 0;i < srcKeys.length;i++) {

其次,您的过滤函数是解的逆函数。仅当该项目具有键且值与源匹配时,该解决方案才返回 true。如果项目不包含该键,或者包含该键并且项目和源值相等(在本例中为所有项目),则过滤器函数将返回 true。

return obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] ==  source[srcKeys[i]];

应该是

return obj.hasOwnProperty(srcKeys[i]) && obj[srcKeys[i]] ==  source[srcKeys[i]];

关于javascript - 过滤器在 Freecodecamp 中的“你为什么要练习”中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937805/

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