在 JavaScript 中拆分数组条目以形成对象
题目要求我们找到一个给定数组的解决方案,并将其拆分成一个带有键值对的 JavaScript 对象。
理解问题
简单来说,我们要将给定的数组转换为对象。JavaScript 中有多种方法可以将数组转换为对象。我们将逐一使用和编写每种方法的代码。
使用 reduce() 和 split() 方法
在这种方法中,我们将使用 JavaScript 的 reduce 和 split 函数。
算法
此算法讨论了针对数组本身中存在的任意数量数组的待解决问题陈述。
步骤 1:声明一个名为 data 的数组并在其中添加一些值。
步骤 2:声明一个名为 result 的变量来存储结果。
步骤 3:为了拆分数组条目,我们将使用 reduce() 方法迭代数组。
步骤 4:现在使用“-”分隔符将每个条目拆分为两部分。因此,我们可以按拆分条目的第一部分对条目进行分组,并计算每对公司和型号的出现次数。
步骤 5:如果存在重复条目,则在此步骤中将计数加 1。
步骤 6:将其转换为对象后返回结果并打印。
示例
// Define data in the form of array const data = [ "Honda−Amaze", "Honda−Jazz", "Honda−Jazz", "Honda−SUV", "Volkswagen−Voyage", "Volkswagen−Atlas", "Volkswagen−Atlas", "Volkswagen−Voyage", "Fiat−Punto", "Fiat−Panda", "Fiat−Strada", "Fiat−Punto", "Fiat−Uno", "Ford−Fiesta", "Fiat−Uno", ]; //split data using reduce and split functions const result = data.reduce((a, b) => { const [Company, model] = b.split("−"); const key = Company + "−" + model; a[key] = a[key] || { Company, model, count: 0 }; // Increment the count a[key].count++; return a; // }, {}); const output = Object.values(result); console.log("The data in Key - Value pair with count") console.log(output);
输出
The data in Key - Value pair with count [ { Company: 'Honda', model: 'Amaze', count: 1 }, { Company: 'Honda', model: 'Jazz', count: 2 }, { Company: 'Honda', model: 'SUV', count: 1 }, { Company: 'Volkswagen', model: 'Voyage', count: 2 }, { Company: 'Volkswagen', model: 'Atlas', count: 2 }, { Company: 'Fiat', model: 'Punto', count: 2 }, { Company: 'Fiat', model: 'Panda', count: 1 }, { Company: 'Fiat', model: 'Strada', count: 1 }, { Company: 'Fiat', model: 'Uno', count: 2 }, { Company: 'Ford', model: 'Fiesta', count: 1 } ]
使用 Object.assign() 方法
Object.assign() 方法在 JavaScript ES6 中引入。此函数的工作机制是从一个或多个输入对象复制所有可枚举的自有元素的值到输出对象。输出对象是第一个参数,也用作返回值。在下面的代码示例中,我们可以演示使用 Object.assign() 方法将数组转换为对象。
Object.assign() 算法
步骤 1:声明一个名为 cars 的数组。
步骤 2:创建另一个名为 objOutput 的变量,并在其中使用 Object.assign 方法并传递数组 cars。
步骤 3:以对象形式返回输出。
Object.assign() 代码
示例
const cars = ["Honda", "Volkswagen","Fiat", "Suzuki"]; //using Object.assign to convert in object const objOutput = Object.assign({}, cars) console.log("Output using Object.assign() method") console.log(objOutput)
输出
Output using Object.assign() method { '0': 'Honda', '1': 'Volkswagen', '2': 'Fiat', '3': 'Suzuki' }
使用展开语法 (...)
要将数组转换为对象,我们可以使用展开运算符。它将转换并从索引 0 开始。
展开运算符算法
步骤 1:定义一个名为 cars 的数组。
步骤 2:创建另一个名为 objOutput 的变量,并在其中使用展开 (...) 运算符并传递数组 cars。
步骤 3:以对象形式返回输出。
展开运算符代码
示例
const cars = ["Honda", "Volkswagen","Fiat", "Suzuki"]; //using spread operator to convert in object const objOutput = {...cars} console.log("Output using spread operator") console.log(objOutput)
输出
Output using spread operator { '0': 'Honda', '1': 'Volkswagen', '2': 'Fiat', '3': 'Suzuki' }
使用 Array.forEach()
借助 forEach 方法,我们可以将数组更改为具有第 0 个索引的对象。
forEach() 方法算法
步骤 1:通过指定名称 cars 来初始化数组。
步骤 2:创建一个名为 objOutput 的空对象,并在其中使用 forEach() 方法并传递数组 cars。
步骤 3:以对象形式返回输出。
forEach() 方法代码
示例
// define an array const cars = ["Honda", "Volkswagen","Fiat", "Suzuki"]; //using forEach method to convert in object const objOutput = {} cars.forEach((element, i) => { objOutput[i] = element }) console.log("Output using forEach method") console.log(objOutput)
输出
Output using forEach method { '0': 'Honda', '1': 'Volkswagen', '2': 'Fiat', '3': 'Suzuki' }
时间和空间复杂度
由于我们使用 JavaScript 的 reduce、Object、split、展开运算符、Object.assign 和 forEach 方法(强大的概念)优化了算法。它使算法的时间复杂度为 O(n),其中 n 是称为 data 的数组中的元素数量。因为我们只使用 reduce() 函数迭代了一次数组。空间复杂度也是 O(n),因为我们为每对唯一的公司和型号创建一个新对象,并且此对象的大小取决于输入数组中唯一对的数量。
结论
这就是我们在编码上下文中通过逻辑和高效的思考来解决所述问题的方法。由于我们拥有 reduce、split 和 Object(JavaScript 的强大方法)的实践经验。我们的结论是,此算法将花费 O(n) 时间来完成执行,并花费 O(n) 空间来保存到内存中。