如何在Javascript中将对象数组重新映射为对象的对象
我有这个价值:如何在Javascript中将对象数组重新映射为对象的对象,javascript,arrays,data-structures,mapping,Javascript,Arrays,Data Structures,Mapping,我有这个价值: const sample = [{ name: "name", value1: 1, mean: 2, create: 10, age: "age", player1: 20, player2: 40, sample: "sample", player3: 30, player4: 100, }]; 要映射到: { name: { value: 1, m
const sample = [{
name: "name",
value1: 1,
mean: 2,
create: 10,
age: "age",
player1: 20,
player2: 40,
sample: "sample",
player3: 30,
player4: 100,
}];
要映射到:
{
name: {
value: 1,
mean: 2,
create: 10
},
age: {
player1: 20,
player2: 40
},
sample: {
player3: 30,
player4: 100
}
}
我知道我能做的是手动映射,但我的列表大约有50个,所以这是不可能的
编辑:
key属性将是if,它是string,数字将是按该顺序排列的值您可以使用函数在对象上迭代,并跟踪最后一个
键
向其添加整数属性:
const示例=[
{
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40,
样本:“样本”,
播放者1A:30,
播放者2A:100,
},
{
姓名:“姓名”,
价值1:11,
平均:22,
创建:130,
年龄:“年龄”,
播放者1:210,
播放者2:430,
样本:“样本”,
播放者1A:340,
播放器2A:1100,
},
{
姓名:“姓名”,
价值:313,
平均数:421,
创建:23,
年龄:“年龄”,
播放者1A:440,
播放者2A:40,
}
];
让lastKey=null;
让mapped=sample.map(elem=>{
设obj={any:{}};
让any=obj.any;
用于(要素中的var p){
设key=p,value=elem[p];
if(类型(值)=“字符串”){
任意[键]={};
lastKey=密钥;
}else if(类型(值)=“数字”){
如果(最后一个键)
任意[lastKey][key]=值;
其他的
任意[键]=值;
}
}
返回obj;
});
console.log(映射)代码>用于将数组和现有属性缩减为所需格式
const示例=[
{
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40,
}
];
const result=sample.reduce((acc,{value1,mean,create,player1,player2})=>{
加速推({
姓名:{
价值1,
意思是
创造
},
年龄:{
玩家1,
玩家2
}
});
返回acc;
}, []);
控制台日志(结果)代码>用于将其映射到内部的新对象结构
const示例=[
{
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40,
}
];
让结果=sample.map(elem=>({
任何:{
姓名:{
价值:要素价值1,
平均数:元素平均数,
创建:elem.create
},
年龄:{
player1:elem.player1,
player2:elem.player2
}
}
}))
控制台日志(结果)
要正确执行此操作,需要在最后一个对象中指定属于名称
和年龄
的属性,如下例所示:
const示例=[
{
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40
},
{
姓名:“弗雷德”,
价值1:3,
平均值:5,
创建:101,
年龄:“年龄”,
播放者1:202,
播放者2:401
}
];
常量keyValuesMap={
//'name'属性将具有'value1'、'mean'和'create'属性
名称:[“value1”、“mean”、“create”],
//'age'属性将具有'player1'和'player2'属性
年龄:[“玩家1”、“玩家2”]
};
const result=sample.map((项目)=>{
//映射“sample”数据并获取每个数据的键/值对
//项,然后使用“reduce”根据
//上面指定的'keyValuesMap'
返回Object.entries(item).reduce((累加器,[键,值])=>{
const name=accumulator.name | |{};
const age=累加器.age | |{};
//如果值属于'name'属性,请添加到该属性中
if(键值映射名称包括(键)){
名称[键]=值;
}
//如果值属于'age'属性,则添加到该属性中
if(键值映射年龄包括(键)){
年龄[关键]=价值;
}
acculator.name=名称;
年龄=年龄;
回流蓄能器;
}, {});
});
console.log(“结果”,result)代码>您可能想要这样的东西
const sample=[{name:“name”,value1:1,mean:2,create:10,age:“age”,player1:20,player2:40,},];
res=样本减少((r,c)=>{
让钥匙;
Object.entries(c.forEach)(o)=>{
(k=o[0]),(v=o[1]);
typeof v==“string”?((key=v),(r[v]={})):(r[key][k]=v);
});
返回r;
}, {});
控制台日志(res)代码>您的描述不清楚,但是,我认为您希望将一组属性重新映射到一个新属性,前提是键和值相同
此外,我放置了一个新的key=value=“other”,之后的属性被分组在“other”下,因此您不必指定所有的键
const示例=[{
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40,
}, {
姓名:“姓名”,
价值1:1,
平均值:2,
创建:10,
年龄:“年龄”,
播放者1:20,
播放者2:40,
其他:“其他”,
p2:“ldkdskd”,
p1:10
}];
函数remapdata(数据){
常量obj={};
常量键=对象键(数据);
设lastGroup=未定义;
设i=0;`在此处输入代码`
while(i
.as console wrapper{min height:100%!important;top:0;}
每个人都应该意识到,任何重构任何对象的键值对的方法实际上都依赖于一个结构,该结构必须始终确保,例如object.keys
的键值顺序准确地表示任何键值的创建顺序。此外,创建此类对象的环境也必须确保这种可行且可复制的顺序
如果可以概括为,“…只要在键值对key
中等于value
,就要创建一个通过key
分配给重采样结构的新对象”,就应该