Javascript Es6-如何在不循环的情况下更改obj道具名称?
在es6中,我有一个数组Javascript Es6-如何在不循环的情况下更改obj道具名称?,javascript,es6-class,Javascript,Es6 Class,在es6中,我有一个数组 [{id:0,name:"a"},{id:1,name:"b"}] 我想在不映射或循环的情况下更改它的道具名称 [{value:0,label:"a"},{value:1,label:"b"}] 我可以使用alias-like函数吗?或任何其他替代方法 首先谢谢你 函数示例中的别名: 功能(id:标签){ …在此函数中,标签为id }您可以使用对象分解,Array.prototype.shift() let arr=[{id:0,名称:“a”},{id:0,名称
[{id:0,name:"a"},{id:1,name:"b"}]
我想在不映射或循环的情况下更改它的道具名称
[{value:0,label:"a"},{value:1,label:"b"}]
我可以使用alias-like函数吗?或任何其他替代方法
首先谢谢你
函数示例中的别名:
功能(id:标签){
…在此函数中,标签为id
}您可以使用对象分解,
Array.prototype.shift()
let arr=[{id:0,名称:“a”},{id:0,名称:“b”}];
设res=[];
([{id:res[res.length],name:res[res.length]}
,{id:res[res.length],name:res[res.length]}]=arr);
arr=[{value:res.shift(),label:res.shift()}
,{value:res.shift()+1,label:res.shift()}];
控制台日志(arr)代码>如果条目数可变,则可以使用代理
var thing=[{id:0,名称:“a”},{id:0,名称:“b”}]
var newThing=新代理(对象{
get:(target,name,receiver)=>!isNaN(parseInt(name))?({value:target[name].id,label:target[name].name}):target[name]
});
console.log(newThing[0])//对象{值:0,标签:“a”}
newThing.forEach(item=>console.log(item));
//对象{值:0,标签:“a”}
//对象{value:0,标签:“b”}
您所说的“别名”是什么意思?如果不执行该操作n次,就无法更改n个内容。@guest271314的可能重复:当然,很多人都希望这样。但这并不意味着它是可能的/合理的。。。你知道长度吗,它总是2(或其他一些固定数字)-如果不知道,那么你需要循环或使用黑色Majicki如果你有诸如“无映射或循环”之类的约束,那么你还必须告诉我们更多关于你的数据结构的信息。数组中最多只能有两个元素吗?对象总是只有这两个属性吗?这不是不必要的复杂吗?如果代码只适用于固定数量的元素,那么使用arr=[{value:arr[0].id,label:arr[0].name},{value:arr[1].id,label:arr[1]
,只在一行中执行,岂不是既短又容易理解吗?@nnnnnnnn是的,您的方法更简洁。@nnnnnnnn,在使用单个默认参数时是否可能达到要求?根据最近的评论,数组长度不确定
-因此,数组长度2的硬编码是不可能的work@JaromandaX对于输入数组的.length
,可以扩展相同的模式。也就是说,为了满足“无循环”的要求,索引1
处对象的“值”
属性应该是1
@guest271314-我很有信心问题的输入数据中有输入错误(应该是0和1,而不是0和0)。主题行询问的是更改属性名称,而不是值。(否则,它实际上只是(甚至更多地)猜测OP想要做什么。)我的回答涵盖了两种情况:p前瞻性思维,这是me@JaromandaX返回值是一个字符串,原始输入是一个数字。很容易修复@guest271314-你不这么认为吗-你当然仍然假设value
是顺序位置(我现在修好了)