JavaScript中如何获取数组内指定命名对象的索引?
问题分析与解决方案
你遇到的问题核心是误解了数据结构:你写的manifest.coffee.beans用了数组的方括号[],但里面却是键值对形式,这在JavaScript里是语法错误的——数组只能存放有序的元素,不能用key: value的格式。实际上你的beans应该是一个对象(用大括号{}包裹),这也是为什么indexOf()完全不起作用的原因:indexOf()是数组的方法,对象根本没有这个方法。
正确的做法分两种情况:
1. 如果你只是想获取"CB_2020_0005"对应的对象(不需要索引)
直接通过对象的键访问即可,这也是最直接高效的方式:
const targetBean = manifest.coffee.beans["CB_2020_0005"]; // 此时targetBean就是 { price: 3.3, amount: 10 }
2. 如果你确实需要获取该键在对象键列表中的“索引”
对象本身是无序的(ES6+虽然会保留插入顺序,但本质上不是数组那样的有序结构),但你可以先把对象的键转换成数组,再用indexOf():
// 第一步:获取beans对象的所有键,组成一个数组 const beanKeys = Object.keys(manifest.coffee.beans); // 第二步:在键数组中查找目标键的索引 const idx = beanKeys.indexOf("CB_2020_0005"); // 此时idx的值是1,对应第二个键的位置
最后修正你的数据结构
先把beans的数组方括号[]改成对象的大括号{},否则代码会报错:
const manifest = { userData: {}, coffee: { beans: { // 这里改成大括号 "CB_2020_0001": { price: 2.5, amount: 5 }, "CB_2020_0005": { price: 3.3, amount: 10 } }, instant: [] } };
内容的提问来源于stack exchange,提问作者DanteC
相关产品推荐
相关产品推荐

