Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组分解为对象属性键_Javascript_Destructuring_Ecmascript 2016_Ecmascript Next - Fatal编程技术网

Javascript 将数组分解为对象属性键

Javascript 将数组分解为对象属性键,javascript,destructuring,ecmascript-2016,ecmascript-next,Javascript,Destructuring,Ecmascript 2016,Ecmascript Next,我有一个值数组,如: const arr = [1,2,3]; 是否有任何方法可以使用destructuring创建以下输出?如果没有,在ES6(或更高版本)中,我可以用什么最简单的方法来实现这一点 我尝试过这个,但我想它不起作用,因为这是计算键的语法: const arr = [1,2,3]; const obj = { [one, two, three] = arr }; 我不相信有任何结构化/解构解决方案可以在一个步骤中完成,不。我想要类似的东西。旧的似乎没有新的腿,所以我认为现在

我有一个值数组,如:

const arr = [1,2,3];
是否有任何方法可以使用destructuring创建以下输出?如果没有,在ES6(或更高版本)中,我可以用什么最简单的方法来实现这一点

我尝试过这个,但我想它不起作用,因为这是计算键的语法:

const arr = [1,2,3];
const obj = {
  [one, two, three] = arr
};

我不相信有任何结构化/解构解决方案可以在一个步骤中完成,不。我想要类似的东西。旧的似乎没有新的腿,所以我认为现在没有太多的活动

显示了一个非常简洁的两步版本

但如果是两个步骤,您也可以使用简单的对象初始值设定项:

const arr=[1,2,3];
常量对象={
一:arr[0],
二:arr[1],,
三:arr[2]
};

控制台日志(obj)您不仅可以将分解结构分配给变量,还可以分配给现有对象:

const arr = [1,2,3], o = {};    
({0:o.one, 1:o.two, 2:o.three} = arr);
这在没有任何附加变量的情况下工作,并且重复性较小。然而,如果你对此非常挑剔的话,它也需要两个步骤


我不确定这是否有帮助,因为你提到了计算属性

这回答了一个稍有不同的要求,但我来这里是为了寻找这个需要的答案,也许这会帮助其他类似情况的人

给定一个字符串数组:a=['one','two','three'] 什么是一种很好的非嵌套非循环方式来获取这个结果字典:b={1:'1',2:'2',3:'3'}


const b=a.map(a=>({[a]:a})).reduce((p,n)=>({…p,…n}),{})

通过分解结构,您可以创建新变量或分配给现有变量/属性。但是,不能在同一语句中声明和重新分配

const arr=[1,2,3],
obj={};
[obj.1,obj.2,obj.3]=arr;
控制台日志(obj);

//{1:1,2:2,3:3}
使用解构赋值,可以从数组中赋值给对象

请尝试以下示例:

const number={};
[数字一,数字二,数字三]=[1,2,3]

log(数字)
使用lodash的

让DistrictionNames=['alu','bob','alice','Trute','Trute','Trute','Trute','bob'];
设obj={};
DistrictionNames.forEach((ele,i)=>{
obj[i]=ele;
})

console.log('obj',obj)
解构的最初目的是从存储在(嵌套的)对象/数组中的数据中提取值。在您的示例中,您创建了一个对象。对象文字更适合这种情况。使用计算属性实际上会导致与通常问题相反的结果。通常,当人们想使用变量作为对象文字键时,它被视为一个道具。在这里,您希望定义一个prop,但它将被视为一个变量(如果该语法被允许的话)。或者,至少当括号中只有一个时,它会变得模棱两可。@事实上,这就是为什么我希望有一种使用解构而不是计算属性的语法,但这似乎是不可能的。我想这是有道理的,因为longform实际上没有太长,只是重复。它看起来确实像一个令人信服的语法,除了
{[foo]:[“bar”]}
的歧义,这将不得不作为一个不幸的特例来处理。几乎没有创建不必要的变量。@LUH3417:“几乎一步”=“两步”. :-) 但是,是的,这是另一种非常有效的方法。看起来您实际上可以对对象属性进行解构,请参见或below@lohfu-是的,你可以(事实上,我在答案中链接到了这一点)。您可以将结构分解为任何可分配的内容。但它仍然是两个步骤。这是可怕的和惊人的同时。在TypeScript中,我在这里得到一个错误。它说:无法重新声明块作用域变量。您可以使用扩展语法的
对象.assign()
,而不是
.reduce()
常量o=Object.assign(…a.map(val=>({[val]:val}))
const arr = [1,2,3], o = {};    
({0:o.one, 1:o.two, 2:o.three} = arr);
const obj = _.zipObject(['one','two','three'], [1, 2, 3]);
console.log(obj); // { one: 1, two: 2, three: 3 }