【问题标题】:Convert an array into object boolean [duplicate]将数组转换为对象布尔值[重复]
【发布时间】:2018-12-02 20:37:23
【问题描述】:

我有这个数组["one","two","three"] 想把它转换成这个{one:true, two:true, three:true}。基本上正在做的是将数组项转换为对象的键并使它们成为布尔值。我尝试使用扩展运算符{... arr},结果为{0:'one',1:'two',2:'three'},有什么想法吗?

【问题讨论】:

  • @mplungjan 这两个问题都不是骗人的。
  • @mplungjan 它不重复我已经解决了这个问题,但它没有解决我的问题。
  • @praveen kumar 但这完全是骗人的......我很惊讶这里没有人找到它......
  • @JonasW。我做到了。普拉文重新开放
  • @JonasW。这现在完全是一个骗局……不是以前的……

标签: javascript arrays object


【解决方案1】:

您可以映射对象并将它们分配给单个对象。

var array = ["one", "two", "three"],
    object = Object.assign(...array.map(k => ({ [k]: true })));

console.log(object);

【讨论】:

  • 来吧。具有标准功能的标准代码。
  • 我更喜欢reduce by pointy,因为没有额外的转换。您将分配和解构都用于简单的事情,只是为了避免对象初始化。那我得去Pointy的var object = array.reduce((m, v) => (m[v] = true, m), {});
  • 这也是具有标准功能的标准代码:jsfiddle.net/mplungjan/q5e3d8cu:P
  • mplungjan 你能解释一下它为什么起作用吗???
【解决方案2】:

你可以使用.reduce():

var object = array.reduce((m, v) => (m[v] = true, m), {});

回调函数也可以写成传统函数:

var object = array.reduce(function(m, v) {
  m[v] = true;
  return m;
}, {});

.reduce() 函数将数组中的每个值(上面示例代码中的v)与“累加器”值一起传递给回调。回调函数可以对累加器做任何事情,然后它应该返回它。 .reduce() 的第二个参数是累加器的初始值,在本例中是一个新的空对象。

【讨论】:

  • 为什么要减少一个简单的 forEach?保存对象初始化?
  • @mplungjan 因为那时我不需要为目标对象单独声明。我个人总是更喜欢可以写成单个表达式的解决方案。当然,可以在 IIFE 中包装 .forEach() 甚至是简单的 for 循环,但这看起来很乱。
  • @mplungjan 哈哈 :) — 我猜它大部分是重复的,除了这里的值要求。但我当然不反对关闭它。
  • 更多哈哈在这里:jsfiddle.net/mplungjan/q5e3d8cu
【解决方案3】:

我会简单地使用forEach

var keys = ["one","two","three"];
var obj = {};
keys.forEach(function (v) {
  obj[v] = true;
});
console.log(obj);

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多