Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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_Arrays - Fatal编程技术网

Javascript 通过拆分属性为数组的对象来创建对象

Javascript 通过拆分属性为数组的对象来创建对象,javascript,arrays,Javascript,Arrays,我有一个属性为数组(长度可变)的对象数组,我想用通过组合数组属性中的元素创建的新对象(在同一数组中)替换这些对象。 我在一个js类的函数中工作,这就是为什么你会看到“这个” 人们建议我使用.reduce()和.map(),但我不知道如何使用它们。 目标如下: this.apple="apple" this.Array=[ { names:[something1, something2...] fruit:this.apple fe

我有一个属性为数组(长度可变)的对象数组,我想用通过组合数组属性中的元素创建的新对象(在同一数组中)替换这些对象。 我在一个js类的函数中工作,这就是为什么你会看到“这个” 人们建议我使用.reduce()和.map(),但我不知道如何使用它们。 目标如下:


    this.apple="apple"

    this.Array=[ 
      { names:[something1, something2...]
        fruit:this.apple
        features:[feature1,feature2,...]
      }
    ]

预期产出将是:

      // (expected output):

    this.Array=[
      { names:something1,
        fruit:this.apple
        features:feature1
      },
      { names:something1,
        fruit:this.apple
        features:feature2
      },
      { names:something2,
        fruit:this.apple
        features:feature1
      },
      { names:something2,
        fruit:this.apple
        features:feature2
      },
      ...
    ]

.map()将是处理此问题的最佳方法,但是我很快写下了这篇文章,因为我时间有限:

let apple=“apple”;
让数组=[
{
姓名:[“某物1”、“某物2”],
水果:这个,苹果,
功能:[“功能1”、“功能2”]
}
];
让某物=[];
让特征=[];
数组[0]。名称。forEach(项=>{
推(物品);
});
数组[0]。功能。forEach(项=>{
功能。推送(项目);
});
设newtest=[];
for(让index=0;index
上面的代码将执行您需要的操作,而不使用.map(); 简而言之,它的作用是:

我们从初始对象拆分了2个数组,然后通过循环创建一个新数组,然后向同一对象添加相同的索引。不确定这是否正是你想要的

结果如下:

[
{名称:'something1',水果:'apple',特征:'feature1'},
{名称:'something2',水果:'apple',特征:'feature2'}
]

使用
flatMap
可以将数组中的元素解组

const fruit='apple'
常量数组=[
{名称:['something1','something2'],
水果:水果,
功能:['feature1','feature2']
}
]
array.flatMap(({name,fruit,features})=>{
name.flatMap(name=>{
features.flatMap(feature=>{
log({name,fruit,feature}));
})
})

})
一种可能的方法是递归遍历所有键,并为每个键生成一个或多个对象(取决于输入值或数组):

功能组合(obj、键、idx、arr、proto){
arr=arr | |[];
proto=proto |{};
keys=keys | | Object.keys(obj);
idx=idx | | 0;
如果(idx>=密钥长度){
arr.push(Object.assign({},proto));
}
否则{
让key=keys[idx++];
设vals=obj[key];
if(数组isArray(VAL))
对于(让v表示VAL){
proto[key]=v;
联合收割机(obj、钥匙、idx、arr、proto);
}否则{
proto[key]=vals;
联合收割机(obj、钥匙、idx、arr、proto);
}
}
返回arr;
}
让组织={
姓名:[“某物1”、“某物2”],
水果:“苹果”,
功能:[“功能1”、“功能2”],
};

log(…combine(org))没有弄清楚你想要什么,请解释清楚。我有一个对象(this.Array),它的属性(名称、特性)是数组。我想把这个对象分割成多个对象,这些对象的属性只有前一个数组属性的一个元素。在我编写代码时,我希望该对象变成四个不同的对象,它们是由前一个对象的属性中的元素组合而成的。您的代码正是我想要的,但事实是我在一个js类中工作,所以我不能声明const。你能像在js类中一样修改你的代码片段吗?@Drun,用你在文章中提到的
this
替换
const
关键字。。将
const数组
更改为
this.array
。。在
this.Array=[…]
之后使用flatMap解决方案..我尝试过,但它给我错误“names.flatMap不是函数”,因为它不知道什么是“names”is@Drun,是否确定
names
是数组??你能像我为你的解决方案创建的那样在codepen中创建任何示例吗。。如果可能,请使用您的结果修改它。@Drun,如果
array.flatMap
起作用,那么它也应该在
names.flatMap
中起作用,因为flatMap已经识别了
array.flatMap
。。似乎名称不正确。。