将javascript数组转换为具有相同键/值的对象
我有一个返回数组的函数,如下所示: 但我正在尝试填充SweetAlert2对话框 ,所需的输入将如下所示将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',
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"}