如何用原生JavaScript或jQuery获取对象指定键数组对应的取值
这问题我平时写代码也常碰到,给你分享两种实用的实现方式,原生JS和jQuery都能轻松达成需求:
原生JavaScript实现
最直观且高效的方式就是用数组的map()方法,它会遍历你的键数组,逐个从对象中取出对应的值:
const data = { a: 3, b: 7, c: 94, d: 854 }; const keys = ["a", "d"]; // 遍历keys数组,每个key对应取data里的value const result = keys.map(key => data[key]); console.log(result); // 输出:[3, 854]
如果担心某些键可能不存在于data对象中,还可以加个默认值处理,避免出现undefined:
const result = keys.map(key => data[key] ?? "该键不存在");
要是你需要过滤掉那些不存在的键(只保留存在的键对应的值),可以用reduce()方法:
const result = keys.reduce((accumulator, key) => { if (key in data) { accumulator.push(data[key]); } return accumulator; }, []);
jQuery实现
如果你项目里已经引入了jQuery,也可以用它的$.map()方法来实现,逻辑和原生map类似:
const data = { a: 3, b: 7, c: 94, d: 854 }; const keys = ["a", "d"]; const result = $.map(keys, function(key) { return data[key]; }); console.log(result); // 输出:[3, 854]
同样,要处理不存在的键的话,可以加个判断:
const result = $.map(keys, function(key) { return data.hasOwnProperty(key) ? data[key] : null; });
顺便提一句,你一开始想的Object.values(data)[keys]为啥不行?因为Object.values(data)返回的是一个值数组,数组的索引是数字类型的,而你的keys是字符串数组,直接用它当索引会被转成字符串(比如["a","d"]会变成"a,d"),数组里根本没有这个“键”,所以自然得不到想要的结果啦。
内容的提问来源于stack exchange,提问作者0xSingularity
相关产品推荐
相关产品推荐

