
在javascript开发中,我们经常需要将数据从一种结构转换到另一种结构。一个常见场景是将一个单独的对象转换成一个包含该对象的数组,并且可能需要将对象的原始属性名映射到新的属性名。
考虑以下原始数据结构:
var raw_data = {
name: "Mike",
age: "27",
};我们的目标是将其转换为一个数组,其中包含一个对象,该对象的键名被重命名为email和password:
[
{ email: "Mike", password: "27" }
]然而,一个常见的错误是在处理单个对象时,误用循环迭代其属性。例如,以下代码尝试通过遍历raw_data的键值对来构建数组:
var raw_data = {
name: "Mike",
age: "27",
};
var array_data = [];
for (let [key, value] of Object.entries(raw_data)) { // 循环会执行两次
if (value !== "") {
array_data.push({ // 每次循环都会执行 push
email: `${raw_data.name}`, // 这里始终引用原始对象的 name
password: `${raw_data.age}`, // 这里始终引用原始对象的 age
});
}
}
console.log(array_data);这段代码的输出会是:
立即学习“Java免费学习笔记(深入)”;
[
{ email: "Mike", password: "27" },
{ email: "Mike", password: "27" }
]出现重复条目的原因在于for...of Object.entries(raw_data)循环会执行两次(一次针对name,一次针对age)。在每次循环迭代中,array_data.push()都被调用,并且每次都将一个完全相同的对象{ email: raw_data.name, password: raw_data.age }推入数组。这显然不是我们期望的结果。
要实现将单个对象转换为包含一个元素的数组,并进行键名重映射,最简洁和高效的方法是分两步进行:
下面是实现此功能的正确代码示例:
// 原始数据对象
var raw_data = {
name: "Mike",
age: "27",
};
// 步骤1: 创建一个新数组并推入原始对象
var temp_array = [];
temp_array.push(raw_data); // 此时 temp_array 为 [{ name: "Mike", age: "27" }]
// 步骤2: 使用 map 方法转换数组中的对象,重映射键名
var new_array = temp_array.map(item => {
return {
email: item.name, // 将原始的 name 属性映射为 email
password: item.age // 将原始的 age 属性映射为 password
};
});
// 输出最终结果
console.log(new_array);输出结果:
[
{ email: "Mike", password: "27" }
]这个结果正是我们所期望的。
注意事项:
return {
email: item.name || 'default@example.com',
password: item.age || '000000'
};通过本教程,我们学习了如何高效且正确地将一个JavaScript对象转换为包含单个元素的数组,并在此过程中重映射其属性键名。关键在于理解Array.prototype.push()用于构建初始数组结构,而Array.prototype.map()则用于对数组中的元素进行声明式的数据转换和重映射。掌握这种模式对于处理各种JavaScript数据转换场景至关重要。
以上就是JavaScript 对象到数组的转换与键名重映射指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号