JavaScript中如何通过数组元素提取对应键值对并生成新结构?
解决JavaScript数组筛选对象键值对的问题
嘿,先给你揪个小语法错误:你写的结构b用了数组的[]包裹键值对,这不对哦!键值对的映射结构得用对象的{}来定义,正确的b应该是这样:
var b = { US: 'United States', UK: 'United Kingdom', CN: 'China', JP: 'Japan' };
不然运行代码的时候浏览器会直接报错的😉
接下来咱们说怎么从数组a里的元素,匹配b中的对应值,生成目标结构c。其实c也是个对象(不是数组,因为它是键值对形式),这里给你两种常用的实现方式:
方式一:用reduce方法(简洁高效)
reduce可以帮我们遍历数组,逐步构建出目标对象:
var a = ['US','UK']; var b = { US: 'United States', UK: 'United Kingdom', CN: 'China', JP: 'Japan' }; var c = a.reduce((result, currentKey) => { // 可选:先检查b里有没有这个键,避免把不存在的键加进去 if (b.hasOwnProperty(currentKey)) { result[currentKey] = b[currentKey]; } return result; }, {}); // 初始值是空对象 console.log(c); // 输出:{ US: 'United States', UK: 'United Kingdom' }
方式二:用forEach循环(直观易懂)
如果刚接触JS,forEach的写法更容易理解,逻辑和reduce是一样的:
var a = ['US','UK']; var b = { US: 'United States', UK: 'United Kingdom', CN: 'China', JP: 'Japan' }; var c = {}; a.forEach(key => { // 同样可以加个判断,确保键存在 if (b[key]) { c[key] = b[key]; } }); console.log(c); // 同样得到目标对象
最后再提醒一句:你想要的c是键值对结构,所以必须用{}包裹,不能用数组的[]哦,不然语法还是错的~
内容的提问来源于stack exchange,提问作者BadJohnny
相关产品推荐
相关产品推荐

