JavaScript遍历对象后向数组添加单个对象的问题求助
如何在JavaScript中仅将一个对象插入数组(遍历对象时避免重复添加)
你希望将对象转换为指定结构后仅插入数组一次,但当前代码执行后数组中出现了两个重复对象。
现有代码:
//My Object: var raw_data = { name: "Mike", age: "27", }; var array_data = []; //Then I loop through the object: for (let [key, name] of Object.entries(raw_data)) { if (name !== "") { array_data.push({ email: `${raw_data.name}`, password: `${raw_data.age}`, }); } } console.log(array_data);
当前输出:
[ { email: 'nang@gmail.com', password: '1234567' }, { email: 'nang@gmail.com', password: '1234567' } ]
期望输出:
[ { email: 'nang@gmail.com', password: '1234567'} ]
问题原因
你当前代码的问题在于使用Object.entries(raw_data)遍历对象时,raw_data包含2个键值对,循环会执行2次,每次都会向数组中push同一个对象,最终数组里就有2个重复的元素。
解决方案
方案1:直接判断所需字段(推荐)
如果你的需求是将raw_data的name和age转换为email和password的结构并仅添加一次,不需要遍历整个对象,直接检查目标字段是否非空后添加即可:
var raw_data = { name: "Mike", age: "27", }; var array_data = []; // 检查name和age是否非空,满足条件则添加一次对象 if (raw_data.name !== "" && raw_data.age !== "") { array_data.push({ email: raw_data.name, password: raw_data.age }); } console.log(array_data);
方案2:遍历检查所有字段(如需验证全部字段非空)
如果你需要确保raw_data的所有字段都非空才添加对象,可以先遍历验证,再添加一次:
var raw_data = { name: "Mike", age: "27", }; var array_data = []; var allFieldsValid = true; // 遍历所有字段,检查是否存在空值 for (let [key, value] of Object.entries(raw_data)) { if (value === "") { allFieldsValid = false; break; // 发现空值立即停止遍历 } } // 所有字段都非空时,添加一次对象 if (allFieldsValid) { array_data.push({ email: raw_data.name, password: raw_data.age }); } console.log(array_data);
内容的提问来源于stack exchange,提问作者Angret Hua
相关产品推荐
相关产品推荐

