2016-07-23 65 views
2

我有一个返回数组的功能,如下所示:转换JavaScript数组到对象相同的键/值

enter image description here

但我想填充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 “ ”布劳纳斯“,” C。 “,”“,”“,”“,”“,”“,”“,”“,”“,”

+0

也许这将有可能爆炸字符串化的结果,使得到这个结果http://imgur.com/ZZyveGb所需的输出 – Phiter

回答

8

这可以用一个简单的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));

+0

哇,工作得很好!你能解释一下它在做什么吗?听起来太诡异 – Phiter

+0

@PhiterFernandes - 这里没有什么hacky,只是一个简单的'reduce'将数组值集合到一个对象中。 – Amit

2

这里的关键是,你可以使用obj的分配属性[ “字符串”]技术:

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

,没有工作 – Phiter

+0

啊,添加[0]的前参数工作。 – Phiter

1

如果您使用的是jQuery;

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

if you not;

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; 
}, {}); 
相关问题