将数组转换为对象键

IT技术 javascript
2021-03-17 14:02:13

将数组转换为以这些数组值作为键的对象的最佳方法是什么,空字符串作为新对象的值。

['a','b','c']

到:

{
  a: '',
  b: '',
  c: ''
}
5个回答

尝试 Array#Reduce

const arr = ['a','b','c'];
const res = arr.reduce((acc,curr)=> (acc[curr]='',acc),{});
console.log(res)

@ShivamSahil 现在检查,我已经编辑了答案。每次循环都像这样current value插入累加器acc[curr] = '',acc一旦循环结束就返回累加器。,{}定义累加器是一个对象
2021-04-24 14:02:13
有人可以添加这个的typescript版本吗?
2021-04-27 14:02:13
@cbdeveloper typescript版本mycompiler.io/view/AlipcFS
2021-04-30 14:02:13
@ShivamSahil 很好地解释了逗号运算符的工作原理:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-05-08 14:02:13
返回(a[b] = '',a)是什么意思?第二个参数有什么作用?
2021-05-09 14:02:13

您可以使用Array.prototype.reduce()计算属性名称

let arr = ['a','b','c'];
let obj = arr.reduce((ac,a) => ({...ac,[a]:''}),{});
console.log(obj);

从 eslint 的角度来看,这种语法不像投票最多的 +1 那样含糊不清。
2021-04-23 14:02:13
可以做复杂的事情,为什么要做简单的...
2021-05-02 14:02:13
var target = {}; ['a','b','c'].forEach(key => target[key] = "");
“真正的单行代码”只是让代码更加晦涩难懂。最好添加一行并拥有一个您可以立即理解的代码
2021-04-27 14:02:13
我不明白为什么当有如此明显和简单的答案时,每个人都试图用 reduce 使一切复杂化
2021-05-04 14:02:13
通常Array.prototype.map用于创建一个新数组,传递给 map 的函数是一个纯函数。
2021-05-11 14:02:13
为什么map要遍历数组?你本可以选择forEach
2021-05-12 14:02:13
@Tofandel因为这是完善和方便的使用reduce...forEach需要变量声明,reduce是真正的一个衬垫,这是一种任务,它被设计为。这绝对不是“复杂”。
2021-05-16 14:02:13

您可以使用 Object.assign 属性来组合使用 map 函数创建的对象,请注意,如果数组元素的值不唯一,则后者将覆盖先前的

const array = Object.assign({},...["a","b","c"].map(key => ({[key]: ""})));
console.log(array);

您可以使用数组归约函数并在累加器中传递一个空对象。在这个累加器中添加由表示的键curr

let k = ['a', 'b', 'c']

let obj = k.reduce(function(acc, curr) {
  acc[curr] = '';
  return acc;
}, {});
console.log(obj)