【问题标题】:Convert javascript array to object of same keys/values将 javascript 数组转换为具有相同键/值的对象
【发布时间】:2016-07-23 00:27:43
【问题描述】:

我有一个返回数组的函数,如下:

但我正在尝试填充 SweetAlert2 对话框。

As the documentation exemplifies,所需的输入如下所示

inputOptions: {
    'SRB': 'Serbia',
    'UKR': 'Ukraine',
    'HRV': 'Croatia'
  },

考虑到键与值相同,我如何将数组转换为所需的格式?

所以,结果会是这样的:

{
    'aaa123': 'aaa123',
    'Açucena': 'Açucena',
    'Braúnas': 'Braúnas',
    [...]
}

我试过JSON.stringify,但输出不是我需要的:

"[["aaa123","Açucena","Braúnas","C. Fabriciano","gege","gegeq2","Ipatinga","Joanésia","Mesquita","Rodoviário","teste","teste2","Timóteo","Tomatoentro","ts"]]"

【问题讨论】:

  • ["aaa123", "Açucena", "Braúnas"].reduce( (obj, val) => ({ ...obj, [val]: val }), {} );

标签: javascript jquery arrays sweetalert


【解决方案1】:

这可以通过简单的reduce 调用来完成:

// Demo data
var source = ['someValue1', 'someValue2', 'someValue3', 'other4', 'other5'];


// This is the "conversion" part
var obj = source.reduce(function(o, val) { o[val] = val; return o; }, {});


// Demo output
document.write(JSON.stringify(obj));

【讨论】:

  • 哇,工作得很好!你能解释一下它在做什么吗?听起来太老套了
  • @PhiterFernandes - 这里没有什么骇人听闻的东西,只是一个简单的reduce 将数组值聚合到一个对象中。
  • 该死的,当时我什至不知道 reduce 是什么。这就是为什么它对我来说听起来很“骇人听闻”。
  • 两个 ESlint 规则禁止这样做:no-param-reassign no-return-assign
【解决方案2】:
Object.assign(
  {},
  ...['value1', 'value2', 'value3', 'value4', 'value5'].map((value) => ({
    [value]: value,
  })),
)

返回

{value1: "value1", value2: "value2", value3: "value3", value4: "value4", value5: "value5"}

没有常见的 ESlint 规则错误。

【讨论】:

    【解决方案3】:

    如果你使用的是 jQuery;

    $.extend({}, ['x', 'y', 'z']);
    

    如果你没有;

    Object.assign({}, my_array);
    

    另一个例子;

    var arr = [{
      name: 'a',
      value: 'b',
      other: 'c'
    }, {
      name: 'd',
      value: 'e',
      other: 'f'
    }];
    
    const obj = arr.reduce((total, current) => {
      total[current.name] = current.value;
      return total;
    }, {});
    
    console.log(obj);

    【讨论】:

    • 这不回答 OP 的问题,它产生一个带有编号键的对象,而不是键等于值
    【解决方案4】:

    关键是您可以使用 obj["string"] 技术分配属性:

    function ArrayToObject(arr){
        var obj = {};
        for (var i = 0;i < arr.length;i++){
            obj[arr[i]] = arr[i];
        }
        return obj
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多