将数组转换为对象键

Mig*_*ens -3 javascript

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

['a','b','c']
Run Code Online (Sandbox Code Playgroud)

至:

{
  a: '',
  b: '',
  c: ''
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*Ali 31

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

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

  • 从 eslint 的角度来看,这种语法比投票最多的语法 +1 更明确。 (5认同)
  • 当你可以做复杂的事情时为什么要做简单的事情... (4认同)

brk*_*brk 11

您可以使用数组reduce函数并在累加器中传递一个空对象。在此累加器中,添加一个由 表示的密钥curr

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

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

另一种选择是使用for..of循环

let k = ['a', 'b', 'c'];
const obj = {};
for (let keys of k) {
  obj[keys] = '';
 }

console.log(obj)
Run Code Online (Sandbox Code Playgroud)


pra*_*nth 9

尝试 Array#Reduce

var arr = ['a','b','c'];
arr =  arr.reduce((a,b)=> (a[b]='',a),{});
console.log(arr)
Run Code Online (Sandbox Code Playgroud)

  • @ShivamSahil 对逗号运算符如何工作的一个很好的解释:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator (4认同)
  • 返回 `(a[b] = '',a)` 是什么意思?第二个参数有什么作用? (3认同)
  • @cbdeveloper 打字稿版本 https://www.mycompiler.io/view/AlipcFS (3认同)
  • @ShivamSahil 现在检查,我已经编辑了答案。每次循环时,`当前值`都会像这样插入累加器`acc[curr] = ''`中。一旦循环结束,`,acc` 将返回累加器。并且 `,{}` 定义了累加器是一个对象 (2认同)
  • 有人可以添加这个的 Typescript 版本吗? (2认同)

Ale*_*xus 9

var target = {}; ['a','b','c'].forEach(key => target[key] = "");
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么每个人都试图用reduce 使一切变得复杂,因为有一个如此明显和简单的答案 (5认同)
  • 通常使用 [Array.prototype.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) 来创建一个新的数组和传递给 map 的函数是纯函数。 (3认同)
  • @Tofandel,因为这是 `reduce` 的完美且方便的用法...`forEach` 需要变量声明,`reduce` 是真正的单行代码,这是它设计的目的之一。这绝对不“复杂”。 (3认同)
  • 为什么使用“map”来迭代数组?你可以选择“forEach” (2认同)
  • “真正的俏皮话”只会让代码变得更加晦涩难懂。最好添加一行并编写您可以立即理解的代码 (2认同)

Krz*_*ski 7

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

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