【问题标题】:Convert given array to object array using loops [duplicate]使用循环将给定数组转换为对象数组
【发布时间】:2020-02-25 13:19:26
【问题描述】:

我的任务是使用循环将数组转换为对象。

arr = ['a', 'b', 'c', 'd', 'e']; 

到对象数组

arr = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5};

我得到了正确的结果,但我不确定我解决此任务的方式。 请给我一条建议。

let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 0; i < arr.length; i++) {
  obj[arr[i]] = i + 1
}

console.log(obj)

如前所述,结果是对的

{ a: 1, b: 2, c: 3, d: 4, e: 5 }

但我倾向于觉得有更好的解决方案。

【问题讨论】:

  • 如果您的任务是使用循环从数组创建对象,这是一个很好的解决方案。
  • 答案取决于您希望如何处理边缘情况,例如带有孔['a', 'b',,,,,,,'c'] 或重复元素['a', 'b', 'a', 'c'] 的数组

标签: javascript arrays object


【解决方案1】:

一种选择是将arr 转换为条目数组,使用索引指定值,然后使用Object.fromEntries 将其转换为对象:

let arr = ['a', 'b', 'c', 'd', 'e'];
const obj = Object.fromEntries(
  arr.map((prop, i) => [prop, i + 1])
);
console.log(obj);

(不过,Object.fromEntries 是一种相对较新的方法)

【讨论】:

  • 可以认为是“使用循环”吗?
  • Anything 涉及迭代在某处使用循环,尽管 OP 可以澄清他是否不想使用函数方法
  • 他们可能不知道不排除函数方法,因为我怀疑他们对课程的了解有那么远(?)知道它们是什么。在早期阶段,“循环”具有非常特殊的含义。
【解决方案2】:

您可以使用 while 语句并只增加一次 i

var array = ['a', 'b', 'c', 'd', 'e'];
    object = {},
    i = 0;

while (i < array.length) object[array[i]] = ++i;

console.log(object);

【讨论】:

    【解决方案3】:

    您可以使用Array#reduce 来完成此操作。

    1. 初始设置累加器为空对象{}
    2. 对于每次迭代,在新对象的累加器上使用 spread syntax
    3. 然后向这个新对象添加一个新属性,即您的currrent,并将值设置为i(当前索引)+ 1。
    4. 返回新的累加器
    5. 重复直到列表结束

    const arr = ['a', 'b', 'c', 'd', 'e'];
    
    const res = arr.reduce((acc,cur,i)=>({...acc, [cur]:i+1}), {});
    
    console.log(res);

    没有展开运算符的详细解决方案:

    const arr = ['a', 'b', 'c', 'd', 'e'];
    
    const res = arr.reduce((acc,cur,i)=>{
      acc[cur] = i + 1;
      return acc;
    }, {});
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2021-10-25
      • 2016-08-06
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多