【发布时间】:2023-04-10 01:56:01
【问题描述】:
我有以下鞋子对象数组:
var currentInventory = [
{
name: 'Brunello Cucinelli',
shoes: [
{name: 'tasselled black low-top lace-up', price: 1000},
{name: 'tasselled green low-top lace-up', price: 1100},
{name: 'plain beige suede moccasin', price: 950},
{name: 'plain olive suede moccasin', price: 1050}
]
},
{
name: 'Gucci',
shoes: [
{name: 'red leather laced sneakers', price: 800},
{name: 'black leather laced sneakers', price: 900}
]
}
];
使用上面的currentInventory数组,我想找到所有的系带鞋,并指出哪个单词包含lace:
下面的期望输出:
[
{
"nameWords": [
"tasselled",
"black",
"low-top",
"lace-up"
],
"targetWordIndex": 3
},
{
"nameWords": [
"tasselled",
"green",
"low-top",
"lace-up"
],
"targetWordIndex": 3
},
{
"nameWords": [
"red",
"leather",
"laced",
"sneakers"
],
"targetWordIndex": 2
},
{
"nameWords": [
"black",
"leather",
"laced",
"sneakers"
],
"targetWordIndex": 2
}
]
以下是我尝试的代码;它接近但不完全在那里:
function renderLacedShoes(inventory) {
//console.log(inventory)
let finalArr = [];
for (let i=0; i<inventory.length; i++){
let indObj = inventory[i];
let newObj = {};
// dive into values associated with shoes
for (let k=0; k<indObj.shoes.length; k++){
let shoeNameArr = indObj.shoes[k].name.split(" ");
//console.log(shoeNameArr)
if ( (shoeNameArr.includes('lace-up')) || (shoeNameArr.includes('laced')) ){
newObj['nameWords'] = shoeNameArr;
console.log(newObj)
// not working below
newObj['targetWordIndex'] = (shoeNameArr.indexOf('lace-up' || 'laced'))
}
}
finalArr.push(newObj);
}
return finalArr;
}
// TEST:
renderLacedShoes(currentInventory)
我的代码输出:
[ { nameWords: [ 'tasselled', 'green', 'low-top', 'lace-up' ],
targetWordIndex: 3 },
{ nameWords: [ 'black', 'leather', 'laced', 'sneakers' ],
targetWordIndex: -1 } ]
我看到两个问题:它没有返回所有包含鞋的“鞋带”。此外,我的 targetWordIndex 已关闭。
我做错了什么?
【问题讨论】:
-
快速测试显示您的
indexOf呼叫不适用于||运算符。它似乎只检查第一个字符串,如果没有找到它,则返回 -1。 -
请改用
Array.prototype.findIndex()。你说你只需要在这些词中寻找"lace"...所以看看实际的字符串是否包含它
标签: javascript arrays function object indexing