在 JavaScript 中拆分数组条目以形成对象

javascriptweb developmentfront end technologyobject oriented programming更新于 2024/12/20 6:36:17

问题陈述是说我们必须为给定的数组找到解决方案并将其拆分为具有 javascript 中的键值对的对象。

了解问题

简单来说,我们必须将给定的数组转换为对象。 javascript 中有几种将数组转换为对象的方法。 我们将逐一使用和编码它们。

使用 reduce() 和 split() 方法

在此方法中,我们将使用 javascript 的 reduce 和 split 函数。

算法

此处的算法讨论了数组本身中存在任意数量的数组时要解决的问题陈述。

步骤 1:声明一个名为 data 的数组并在其中添加一些值。

步骤 2:声明一个名为 result 的变量来存储结果。

步骤 3:要拆分数组条目,我们将使用 reduce() 方法对数组进行迭代。

步骤 4:现在使用 - 分隔符将每个条目拆分为两部分。因此,我们可以根据拆分条目的第一部分对条目进行分组,并计算每对公司和型号的出现次数。

步骤 5:在此步骤中,如果有重复的条目,则将计数增加到 1。

步骤 6:将结果转换为对象后返回并打印。

示例

// 以数组形式定义数据
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",
];

//使用reduce和split函数分割数据
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"];

//使用 Object.assign 进行对象转换
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"];

//使用扩展运算符在对象中转换
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() 方法的代码

示例

// 定义一个数组
const cars = ["Honda", "Volkswagen","Fiat", "Suzuki"];

//使用 forEach 方法在对象中转换
const objOutput = {}

cars.forEach((element, i) => {
  objOutput[i] = element
})

console.log("使用 forEach 方法的输出")
console.log(objOutput)

输出

使用 forEach 方法的输出
{ '0': 'Honda', '1': 'Volkswagen', '2': 'Fiat', '3': 'Suzuki' }

时间和空间复杂度

由于我们已经使用 reduce、Object、split、spread 运算符、Object.assign 和 forEach 方法等强大的 javascript 概念优化了算法。它给出了算法的时间复杂度 O(n),其中 n 是数组(称为数据)中元素的数量。因为我们只使用 reduce() 函数对数组进行了一次迭代。空间复杂度也是 O(n),因为我们为每一对唯一的公司和型号创建一个新对象,并且该对象的大小取决于输入数组中唯一对的数量。

结论

这就是我们如何通过在编码环境中逻辑和高效地思考来解决所述问题。因为我们有 JavaScript 的 reduce、split 和 Object 强大方法的实际经验。我们得出的结论是,该算法将花费 O(n) 时间来完成执行,并花费 O(n) 空间来节省内存。


相关文章


有用资源