Javascript JS如何返回与选定品种匹配的狗?

Javascript JS如何返回与选定品种匹配的狗?,javascript,loops,object,for-loop,Javascript,Loops,Object,For Loop,我不熟悉编码,无法确定我的代码不起作用的原因。有人对如何修复它有什么建议吗 我得到的问题是: This function takes an array of dog objects and returns an array of the names of all the pugs. E.g. [ {name: 'Beatrice', breed: 'Lurcher'}, {name: 'Max', breed: 'Pug'}, {name: 'Poppy', breed: 'Pug'

我不熟悉编码,无法确定我的代码不起作用的原因。有人对如何修复它有什么建议吗

我得到的问题是:

This function takes an array of dog objects and returns an array of the names of all the pugs.
E.g. [
  {name: 'Beatrice', breed: 'Lurcher'},
  {name: 'Max', breed: 'Pug'},
  {name: 'Poppy', breed: 'Pug'}
]
will return ['Max', 'Poppy']
这是我写的代码

function getPugNames(dogs) {    
    let pugs = []
    let reg = /(pug)/g
    for (let i = 0; i < dogs.length; i ++) {
        if(reg.test(dogs[i].bread)) {
            pugs.push[i].name
        }
    } return pugs
}
这就是我被给予的错误


你刚刚制作了一些名称数组,你需要哈巴狗的名称,你可以像哈巴狗一样使用过滤器你的数组。过滤器(p=>p.bride==='pug')这将为你提供一个只包含哈巴狗元素的数组(查看过滤器文档),而不仅仅是使用map从中获取名称,map根据给定的回调函数转换数组,该函数接受数组元素,并且必须返回新元素(检查array.map)

pugs.push[i].name
是一个错误。你应该有
pugs.push(dogs[i].name)

另外,对于
pug
,您实际上不需要正则表达式。只需这样检查:

function getPugNames(dogs) {
    let pugs = [];
    for (let i = 0; i < dogs.length; i++) {
        if (dogs[i].breed == "Pug") {
            pugs.push(dogs[i].name);
        }
    }
    return pugs;
}

if(dogs[i].breed.toLowerCase()==“pug”)

您的正则表达式应该位于
/(pug)/g
的位置。但在我看来,如果你甚至不需要使用正则表达式。在字符串之间进行直接比较时,可以使用比较运算符
=
===
。 代码中的另一个问题是如何推进数组。应该是
puggs.push(dogs[i].name)
,而不是
puggs.push[i].name
。因此,我建议:

function getPugNames(dogs) {

  let pugs = []
  for (let i = 0; i < dogs.length; i ++) {
    if(dogs[i].bread === 'Pug') {
      pugs.push(dogs[i].bread)
    }
  } 

  return pugs
}
函数getPugNames(狗){
让帕格斯=[]
for(设i=0;i
我更正了您的版本,并为您创建了一个更简单的版本。下面是:

//更正版本
函数getPugNames(狗){
var-pugs=[];
var reg=/pug/gi
for(设i=0;idogs
.map(d=>d.bride.toLowerCase()==“pug”?d.name:null)
.过滤器(e=>e);
常数dogs1=[
{名字:“比阿特丽斯”,品种:“鲁彻”},
{名字:“马克斯”,品种:“哈巴狗”},
{名字:“罂粟”,品种:“哈巴狗”}
];
常数dogs2=[
{名字:“史蒂文”,品种:“鲁彻”},
{名字:“达芙妮”,品种:“帕格”},
{名称:“桑迪”,品种:“拉布拉多”},
{名字:“迈克”,品种:“帕格”},
{名称:“钉子”,品种:“哈巴狗”}
];
常数dogs3=[
{名字:“凯文”,品种:“拉布拉多”},
{名称:“补丁”,品种:“罗威犬”},
{名字:“迈尔斯”,品种:“鲁彻”},
{名字:“桑迪”,品种:“帕格”},
{名称:“斑点”,品种:“哈巴狗”},
{名称:“约瑟芬”,品种:“梗”},
{名字:“埃里克”,品种:“帕格”}
];
log(getPugNames([]);
console.log(getPugNames(dogs1));
console.log(getPugNames(dogs2));
console.log(getPugNames(dogs3));
console.log(getPugNames2([]);
console.log(getPugNames2(dogs1));
console.log(getPugNames2(dogs2));

console.log(getPugNames2(dogs3))在您编写的代码中:

function getPugNames(dogs) {    
    let pugs = []
    let reg = /(pug)/g
    for (let i = 0; i < dogs.length; i ++) {
        if(reg.test(dogs[i].bread)) {
            pugs.push[i].name
        }
    } return pugs
}
(你也有一个拼写错误-你用a拼写
bread

其次,您的语法错误-应该是这样的:

pugs.push(dogs[i].name);
完成所有这些之后,您的代码应该如下所示:

function getPugNames(dogs) {
    let pugs = [];
    for (let i = 0; i < dogs.length; i++) {
        if (dogs[i].breed == "Pug") {
            pugs.push(dogs[i].name);
        }
    }
    return pugs;
}

除了“bread”拼写为“bread”的拼写错误之外,还有什么问题呢?您的正则表达式区分大小写,如果您想要不区分大小写的匹配,那么就用
let reg=/pug/gi
替换它。否则将其替换为
let reg=/Pug/g
。此外,您可能不需要
Regex
为此,您正在测试精确匹配(
==
)欢迎使用SO。如果其中一个答案有用,请接受/投票。谢谢
function getPugNames(dogs) {
    let pugs = [];
    for (let i = 0; i < dogs.length; i++) {
        if (dogs[i].breed == "Pug") {
            pugs.push(dogs[i].name);
        }
    }
    return pugs;
}
const getPugNames = (dogs) => dogs.filter(d => if (d.breed == "Pug") return d.name);