将javascript数组转换为具有相同键/值的对象

将javascript数组转换为具有相同键/值的对象,javascript,jquery,arrays,sweetalert,Javascript,Jquery,Arrays,Sweetalert,我有一个返回数组的函数,如下所示: 但我正在尝试填充SweetAlert2对话框 ,所需的输入将如下所示 inputOptions: { 'SRB': 'Serbia', 'UKR': 'Ukraine', 'HRV': 'Croatia' }, 考虑到键与值相同,如何将数组转换为所需的格式 这样的结果就是: { 'aaa123': 'aaa123', 'Açucena': 'Açucena', 'Braúnas': 'Braúnas',

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

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

,所需的输入将如下所示

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。 法布里奇亚诺、格格、格格2、伊帕廷加、琼妮西亚、梅斯基塔、罗多维亚里奥、泰斯特、泰斯特2、蒂莫西奥、托马托恩特罗、ts”]”


关键在于,您可以使用obj[“字符串”]技术指定属性:

function ArrayToObject(arr){
    var obj = {};
    for (var i = 0;i < arr.length;i++){
        obj[arr[i]] = arr[i];
    }
    return obj
}
函数ArrayToObject(arr){
var obj={};
对于(变量i=0;i
这可以通过一个简单的
reduce
调用来完成:

//演示数据
var source=['someValue1','someValue2','someValue3','other4','other5'];
//这是“转换”部分
var obj=source.reduce(函数(o,val){o[val]=val;返回o;},{});
//演示输出

document.write(JSON.stringify(obj))如果您正在使用jQuery

$.extend({}, ['x', 'y', 'z']);
如果你没有

Object.assign({}, my_array);
另一个例子

var arr = [{name: 'a', value: 'b', other: 'c'}, {name: 'd', value: 'e', other: 'f'}];

var obj = arr.reduce(function ( total, current ) {
    total[ current.name ] = current.value;
    return total;
}, {});
返回

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

没有常见的ESlint规则错误。

哇,工作正常!你能解释一下它在干什么吗?听起来也一样hacky@PhiterFernandes-这里没有什么乱七八糟的,只是一个简单的
reduce
,它将数组值聚合到一个对象中。该死的,当时我甚至不知道reduce是什么。这就是为什么它对我来说听起来很“黑”的原因。有两条ESlint规则禁止这样做:no param reassign no return assign这并没有回答OP的问题,它生成一个带有编号键的对象,而不是键等于值
[“aaa123”,“Açucena”,“Braúnas”]。reduce((obj,val)=>({……obj,[val]:val}),{})
{value1: "value1", value2: "value2", value3: "value3", value4: "value4", value5: "value5"}