Javascript 从对象数组中,返回新数组中的键

Javascript 从对象数组中,返回新数组中的键,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个对象数组,必须返回一个新数组中的关键小狗: 此函数采用以下格式的狗数组: [ {breed: 'Labrador', puppies: ['Fluffy', 'Doggo', 'Floof'] }, {breed: 'Rottweiler', puppies: ['Biscuits', 'Mary'] } ] 它应该返回所有狗的所有小狗的数组: ['Fluffy', 'Doggo', 'Floof', 'Biscuits', 'Mary'] 这是我目前的代码: functio

我有一个对象数组,必须返回一个新数组中的关键小狗: 此函数采用以下格式的狗数组:

[
  {breed: 'Labrador', puppies: ['Fluffy', 'Doggo', 'Floof'] },
  {breed: 'Rottweiler', puppies: ['Biscuits', 'Mary'] }
]
它应该返回所有狗的所有小狗的数组:

['Fluffy', 'Doggo', 'Floof', 'Biscuits', 'Mary']
这是我目前的代码:

function collectPuppies (dogs) {

    let solution=[];
    for(let i=0; i<dogs.length; i++){
      solution.push(dogs[i].puppies);
    }
    return solution;
  }
我已经在线程中看到了我的解决方案,所以我相信我还不算太远,但无法找出我做错了什么。有人能帮我吗?提前感谢。

使用将项目推入阵列:

康斯特犬=[{品种:拉布拉多,小狗:[毛茸茸的,多哥的,弗洛夫的]},{品种:罗特韦尔犬,小狗:[饼干,玛丽]}; 小狗的功能{ 常数解=[]; 对于let i=0;i 康斯特犬=[{品种:拉布拉多,小狗:[毛茸茸的,多哥的,弗洛夫的]},{品种:罗特韦尔犬,小狗:[饼干,玛丽]}; 小狗的功能{ 常数解=[]; 对于let i=0;i 康斯特犬=[{品种:'拉布拉多',小狗:['Fluffy','Doggo','Floof']},{品种:'罗威纳',小狗:['饼干','Mary']}] const collecties=dogs=> dogs.mapd=>d.puppies.reducea,b=>a.concatb,[]; 控制台。收集小狗 你可以喝咖啡

康斯特犬=[{品种:'拉布拉多',小狗:['Fluffy','Doggo','Floof']},{品种:'罗威纳',小狗:['饼干','Mary']}] const collecties=dogs=> dogs.mapd=>d.puppies.reducea,b=>a.concatb,[]; 控制台。收集小狗 您只需要减少Array.prototype的数量

x=[{品种:'拉布拉多',小狗:['Fluffy','Doggo','Floof']},{品种:'罗特韦尔',小狗:['饼干','Mary']}; var结果=x.reducey,e=>y.concate.puppies,[]; console.logresult 您只需要减少Array.prototype的数量

x=[{品种:'拉布拉多',小狗:['Fluffy','Doggo','Floof']},{品种:'罗特韦尔',小狗:['饼干','Mary']}; var结果=x.reducey,e=>y.concate.puppies,[]; console.logresult 将每个参数推送到数组,但不是每个参数的单个数组元素

更正代码的最简单方法是将推送替换为:

concat方法用于合并两个或多个数组

将每个参数推送到数组,但不是每个参数的单个数组元素

更正代码的最简单方法是将推送替换为:

concat方法用于合并两个或多个数组


在对象数组中,小狗也是一个数组。因此,您将向数组中添加一个数组。而不是:

solution.push(dogs[i].puppies);
您需要在puppies数组中循环,并将每个puppies分别添加到解决方案数组中。第二个内部循环不是将“puppies”字段添加到解决方案数组,而是循环每个对象的puppies数组并将其添加到解决方案数组。第二个内部循环可以通过调用puppies数组上的forEach轻松完成。例如:

dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
最后一个功能是:

function collectPuppies (dogs) {
    let solution=[];
    for(let i=0; i<dogs.length; i++){
       dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
    }
    return solution;
}

在对象数组中,小狗也是一个数组。因此,您将向数组中添加一个数组。而不是:

solution.push(dogs[i].puppies);
您需要在puppies数组中循环,并将每个puppies分别添加到解决方案数组中。第二个内部循环不是将“puppies”字段添加到解决方案数组,而是循环每个对象的puppies数组并将其添加到解决方案数组。第二个内部循环可以通过调用puppies数组上的forEach轻松完成。例如:

dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
最后一个功能是:

function collectPuppies (dogs) {
    let solution=[];
    for(let i=0; i<dogs.length; i++){
       dogs[i].puppies.forEach((puppy) => {solution.push(puppy)});
    }
    return solution;
}

{puppies}=>puppies vs.d=>d.小狗:思考:尽管d。比较短,我喜欢解构,因为它关注方法中重要的内容。即使我慷慨大方,使用dog=>dog.puppies,我还是更喜欢它,而不是那些乱七八糟的括号/括号。在这种情况下,没有必要去破坏结构,这就可以解释了,因为我肯定不会:{puppies}=>puppies vs.d=>d.puppies:思考:虽然d。比较短,我喜欢解构,因为它关注方法中重要的内容。即使我慷慨大方,使用dog=>dog.puppies,我还是更喜欢它,而不是那些乱七八糟的括号/括号。在这种情况下,没有必要破坏结构。这可以解释为什么,因为我肯定不会: