JavaScript动态生成对象键异常:循环未赋值导致结果为空问题排查
问题分析与修正方案
问题原因
- 逻辑方向完全搞反:你当前代码是遍历
filteredArr里的所有国家,判断这些国家是否在uniqCountry中,但filteredArr里的India、China、Pakistan、Germany没有一个出现在uniqCountry的列表里,导致核心判断条件if (uniqCountry.includes(value))从未触发,自然不会往空对象obj里添加任何内容。 - 需求逻辑混淆:你的目标是把
uniqCountry里的国家归类到Rest键下,但代码完全没处理uniqCountry的内容,反而在反向匹配无关的国家列表。
修正方案
方案一:直接实现预期(适用于uniqCountry内容全属于Rest的场景)
如果你的预期就是把整个uniqCountry数组放到obj.Rest中,不需要复杂循环,直接赋值即可:
const obj = {}; const uniqCountry = ['Italy', 'Japan', 'Russia', 'Poland']; obj['Rest'] = [...uniqCountry]; // 用扩展运算符复制数组,避免后续原数组修改影响obj内的数据 console.log('Object', obj);
方案二:严谨判断(适配uniqCountry中可能存在filteredArr内国家的场景)
如果需要更通用的逻辑——判断uniqCountry里的国家是否不在filteredArr的任何分组中,再归类到Rest,可以这么写:
const obj = {}; const filteredArr = { 'Asia': ['India', 'China', 'Pakistan'], 'Europe': ['Germany'] }; const uniqCountry = ['Italy', 'Japan', 'Russia', 'Poland']; // 把filteredArr里的所有国家收集到Set中,提升查找效率 const allFilteredCountries = new Set(); for (const region in filteredArr) { filteredArr[region].forEach(country => allFilteredCountries.add(country)); } // 筛选出uniqCountry中不在filteredArr里的国家,赋值给Rest obj['Rest'] = uniqCountry.filter(country => !allFilteredCountries.has(country)); console.log('Object', obj);
内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur
相关产品推荐
相关产品推荐

