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