Javascript 新的对象数组,但具有更改的键

Javascript 新的对象数组,但具有更改的键,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,我在使用对象数组拾取一些数据并将其推入新对象(在不同的数组中)时遇到问题,但方式不同 const fruits = [ {name: "apple"}, {name: "kiwi"}, {name: "banana"}, {name: "orange"}, {name: "pineapple"}, {name: "coconut"}, {name: "peach"}, {name: "lemon"} ] 我想从中挑选一些项目,并将它们粘贴到全新的数组中,因此它可能看起来像这样: const

我在使用对象数组拾取一些数据并将其推入新对象(在不同的数组中)时遇到问题,但方式不同

const fruits = [
{name: "apple"},
{name: "kiwi"},
{name: "banana"},
{name: "orange"},
{name: "pineapple"},
{name: "coconut"},
{name: "peach"}, 
{name: "lemon"}
]
我想从中挑选一些项目,并将它们粘贴到全新的数组中,因此它可能看起来像这样:

const manyFruits = [
{name: "apple-banana-kiwi-coconut"},
{name: "orange-pineapple-peach-lemon"}]
如果能做一个函数,该函数需要一个参数,即我们想要在新数组中拾取多少果实,并且它们不应该重复,那就太好了

下面是我的代码。首先,我用名称创建新数组,然后根据“长度”将它们放入新数组,最后,我尝试用对象创建新数组,但失败了

const fruitArray = length => {


const fruits = [
    {name: "apple"},
    {name: "kiwi"},
    {name: "banana"},
    {name: "orange"},
    {name: "pineapple"},
    {name: "coconut"},
    {name: "peach"},
    {name: "lemon"}
]

const allFruits = []

for (let i = 0; i < fruits.length; i++) {
    allFruits.push(fruits[i].name)
}

const newFruits =[]

for (let i = 0; i < length; i++) {
    newFruits.push(allFruits[i])
}

const manyFruitsInOneArr = []

for (let i = 0; i < 2; i++) {
    let newArr = {
        name: newFruits.join("-"),
    }

    manyFruitsInOneArr[i] = (newArr)
}

console.log(manyFruitsInOneArr)

}
fruitArray(2)
const froutarray=length=>{
常数=[
{名称:“苹果”},
{名称:“猕猴桃”},
{名称:“香蕉”},
{名称:“橙色”},
{名称:“菠萝”},
{名称:“椰子”},
{name:“peach”},
{名称:“柠檬”}
]
常量allFruits=[]
for(设i=0;i

它在新数组中生成新对象,但项目始终相同。

您可以使用
for
循环和内部
map()
方法为其创建函数,以获取名称数组,并使用
join()
从值生成字符串

const fruits=[{“name”:“apple”},{“name”:“kiwi”},{“name”:“banana”},{“name”:“orange”},{“name”:“菠萝”},{“name”:“coil”},{“name”:“peach”},{“name”:“lemon”}]
常数选取=(arr,n)=>{
常数r=[];
对于(变量i=0;iname)
。加入(“-”);
r、 推送({name})
}
返回r;
}
常量结果=拾取(水果,2)

console.log(result)
可以使用递归完成:

 function subset(arr, n){
   if(!(n - 1)) return [arr[0].name];
   const result = [];
   for(let i = 0; i < arr.length - n; i++){
       for(const sub of subset(arr.slice(i + 1), n - 1)){
          result.push(arr[i].name + "-" + sub);
       }
   }
   return result;
 }

谢谢这真的很有帮助!我还有一个问题。如果“水果”看起来像这个常量水果=[{名称:“苹果”,能量:100},{名称:“猕猴桃”,能量:126},{名称:“香蕉”,能量:150},{名称:“橙色”,能量:118},{名称:“菠萝”,能量:98},{名称:“椰子”,能量:83},{名称:“桃”,能量:65},{名称:“柠檬”,能量:36}我如何添加“能量”结果的位置,它总结了“用过的”水果的所有能量?对不起,我不够精确。结果应该是这样的:[{name:“苹果猕猴桃”,能量:226},{name:“香蕉橙”,能量:268}],其中能量是来自“水果”的苹果和猕猴桃能量的总和,谢谢!很抱歉再次打扰你,但我还有一个问题<代码>结果
数据库仅包含8项,因此如果
n=3
结果数组中的最后一项将是“半空”。例如,
n=3
,结果是:
{name:“苹果猕猴桃香蕉”,能量:376},{name:“橙色菠萝椰子”,能量:299},{name:“桃子柠檬”,能量:101}
正如你所看到的
桃子柠檬
只有2项。不正确的项目(不包含
n
名称)不应返回。我希望结果是这样的:
{name:“苹果猕猴桃香蕉”,energy:376},{name:“橙色菠萝椰子”,energy:299}
如何破例?例如,我不希望
苹果
猕猴桃
匹配,因此结果中的位置应如下所示:
{name:“苹果香蕉橙”,energy:something}
不应重复。。在其中一个结果中,还是在所有结果中?那么
苹果猕猴桃香蕉
苹果猕猴桃橙
是否理想(长度3)?不,它们不应该重复。如果我们有
苹果猕猴桃香蕉
,那么苹果、猕猴桃和香蕉都不应该再出现了。然后忽略我的回答。。。
 subset(fruits, 5);