如何在JavaScript中遍历对象并动态将符合条件的项推入数组?
问题:提取对象中值以"_0"结尾的键值对并整合到数组中的对象
我主要是一名Python开发者,现在尝试用JavaScript解决一个问题。现有如下数据:
const data = { name: "james_0", hobby: "dev_0", country: "usa", }
我希望将data对象中值以"_0"结尾的键值对整合到一个对象中,再将该对象推入数组,预期结果如下:
const result = [{name: "james_0", hobby: "dev_0"}]
我尝试了以下代码,但似乎存在问题:
const result = [] for (const [key, value] of Object.entries(data)) { if (value.endsWith("_0")) { result.push({key: value}) // 此处似乎存在问题 } } console.log("result", result)
问题原因
你代码里的问题出在{key: value}这一行——JavaScript里直接写key会把它当成字面量属性名,而不是用变量key的实际值作为属性名。所以循环结束后,你得到的是[{key: "james_0"}, {key: "dev_0"}],和预期的单个对象整合的结果不符。
正确实现方式
方法一:手动循环构建对象
先创建一个空对象来存放符合条件的键值对,循环结束后再把这个对象推入数组:
const data = { name: "james_0", hobby: "dev_0", country: "usa", } const result = [] const filteredObj = {} for (const [key, value] of Object.entries(data)) { if (value.endsWith("_0")) { filteredObj[key] = value // 用方括号语法把变量key作为属性名 } } result.push(filteredObj) console.log("result", result) // 输出: [{name: "james_0", hobby: "dev_0"}]
方法二:用Object.fromEntries简化代码
可以用数组方法直接筛选并转换,省去手动循环的步骤:
const data = { name: "james_0", hobby: "dev_0", country: "usa", } // 筛选出值以"_0"结尾的键值对,再转成对象,最后放到数组里 const filteredEntries = Object.entries(data).filter(([_, value]) => value.endsWith("_0")) const result = [Object.fromEntries(filteredEntries)] console.log("result", result)
说明
- 方法一中的
filteredObj[key] = value,方括号语法会把key变量的实际值(比如"name"、"hobby")作为对象的属性名,这样就能正确把键值对整合到同一个对象里。 - 方法二中的
Object.fromEntries可以把键值对数组直接转换成对象,搭配filter能更简洁地完成筛选和转换操作。
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

