如何获取对象数组随机元素的索引,设置对应name为图片alt属性?
问题解决思路
首先先修正你代码里的一个语法错误:你的items数组里,后面两个对象缺少了大括号,正确的数组写法应该是这样:
const items = [{ name: "item1", img: "img/pic/picture1.png" }, { name: "item2", img: "img/pic/picture2.png" }, { name: "item3", img: "img/pic/picture3.png" }];
你之前的方向绕远了,而且逻辑有误:
- 用
items.indexOf(randomImg)找不到结果,是因为randomImg是字符串类型的图片路径,而items数组里的元素是对象,两者类型和值都不匹配,自然返回-1。 - 你写的
findIndex条件ele => ele === randomImg[ele]逻辑完全错误,ele是数组里的对象,randomImg是字符串,randomImg[ele]根本没有意义,所以也得不到正确索引。
最优解决方案
其实完全不需要再去查找索引,直接先获取整个随机对象,然后分别取它的img和name属性就行,代码更简洁高效:
// 先获取随机对象 const randomItem = items[Math.floor(Math.random() * items.length)]; // 设置图片src itemImg.src = randomItem.img; // 设置图片alt itemImg.alt = randomItem.name;
如果一定要用查找方式(不推荐,多此一举)
如果你非要通过图片路径去查找对应的对象,也可以这样写,但没必要多做一次遍历:
const randomImg = items[Math.floor(Math.random() * items.length)].img; itemImg.src = randomImg; // 用find找到对应的对象 const targetItem = items.find(item => item.img === randomImg); if (targetItem) { itemImg.alt = targetItem.name; }
内容的提问来源于stack exchange,提问作者Sergey Cage
相关产品推荐
相关产品推荐

