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 }