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、spread操作符、Object.assign和forEach等方法对算法进行了优化,因此算法的时间复杂度为O(n),其中n是数组中元素的数量。因为我们只使用了reduce()函数对数组进行了一次迭代。空间复杂度也是O(n),因为我们为每个唯一的公司和型号对创建了一个新对象,而这个对象的大小取决于输入数组中唯一对的数量。
结论
这就是我们如何在编码的上下文中通过逻辑思考和高效处理来解决所述问题的方法。由于我们有使用reduce、split和Object等强大的JavaScript方法的实际经验,我们得出的结论是该算法将花费O(n)的时间来完成执行,并且需要O(n)的空间来保存在内存中。